2013-04-07 7 views
-5

Je fais le projet en C# et je cherche le code qui peut m'aider à vérifier soit la phrase est positive ou négative ou vague sur la base des émoticônes.recherche phrase est positive ou négative sur la base des émoticônes C#

Par exemple:

  1. J'aime mon pays :) - (positif) car il contient heureux smiley
  2. J'aime mon pays :(- (négatif) parce qu'il contient triste smiley
  3. temps est bon :(:) - (vague) parce qu'il contient deux smileys donc il est vague de dire soit il est positif ou négatif
  4. Je ne veux pas aller à l'université :(:) :) - (positif) parce qu'il contient deux smileys heureux et un triste.

Mon domaine de projet est l'analyse des sentiments.

+0

python et java ont des bibliothèques. vous devrez peut-être écrire votre propre, voir ce q pour ref: http://stackoverflow.com/questions/4199441/best-algorithmic-approach-to-sentiment-analysis – MatthewMartin

+3

Ce n'est pas une vraie question de programmation, vous êtes il suffit de demander comment faire quelque chose plutôt que de savoir comment résoudre un problème, etc .; avez-vous essayé de résoudre cela vous-même? Avez-vous déjà regardé des résultats de recherche pour "comment rechercher une chaîne"? – Clint

+0

Vous pouvez compter le ')' et le '(' afin d'estimer le facteur positif – Casperah

Répondre

1

Utilisez Regex.Matches

var upScore = Regex.Matches(input, @":\)").Count; 
var downScore = Regex.Matches(input, @":\(").Count; 
var totalScore = upScore - downScore; 

Bien qu'il soit mauvaise pratique utiliser des effets secondaires dans un MatchEvaluator, vous pouvez également utiliser Regex.Replace pour faire une seule passe à travers la chaîne:

var score = 0; 
MatchEvaluator match = m => 
{ 
    score += m.Value[1] == ')' ? 1 : -1; 
    return m.Value; 
}; 
Regex.Replace(input, ":[()]", match); 
+0

Cela pourrait fonctionner si ** a) ** motif regex ** b) ** l'ordre des paramètres était correct. – I4V

+0

Mais il a encore quelques bugs. devine où? – I4V

+0

@ I4V l'a eu. merci de me garder honnête –

2

Une autre regex ;)

string input = "I don't want to go to College :(:) :) "; 

var score = Regex.Matches(input, @"(?<a>:\))|(?<b>:\()") 
       .Cast<Match>() 
       .Select(m => m.Groups["a"].Success ? 1 : -1) 
       .Sum(); 
+0

Je l'aime. +1 pour ne pas utiliser d'effets secondaires. –

Questions connexes