2011-10-03 155 views
1

我想计算有多少行包含与我选择的关键字匹配的单词。所以我编码这样。如何使用python从文本中提取确切的单词?

28   for each_keyword in keywords: 
    29    if each_keyword in text: 
    31     related_tweet_count += 1 
    32     print "related_tweet_count", related_tweet_count 
    33     print text 

它表现非常好。但它有一个问题。例如,我有一个关键字“流感”,那么它不仅给“流感”,而且“影响”。为了解决这个问题,我搜索了匹配词的例子,并修复了这样的代码。

28   for each_keyword in keywords: 
    30    if re.search('\beach_keyword\b', text, re.I): 
    31     related_tweet_count += 1 
    32     print "related_tweet_count", related_tweet_count 
    33     print text 

但它不起作用。请帮助我!

回答

7

您需要将each_keyword替换为正则表达式。目前它正在试图匹配“each_keyword”。

28   for each_keyword in keywords: 
30    if re.search('\\b' + each_keyword + '\\b', text, re.I): 
31     related_tweet_count += 1 
32     print "related_tweet_count", related_tweet_count 
33     print text 
+0

非常感谢!在我提出这个问题之前,我尝试过使用“if re.search('\ b'+ each_keyword +'\ b',text,re.I):”并且它不起作用。我忘记了“\\”的用法。 – ooozooo

+0

没问题。我发现有时'\ x'会起作用,如果它不是一个有效的字符串转义序列,但为了保持一致性,最好总是使用'\\ x'。 – connec

0

或者做没有正则表达式和使用更多千瓦的变化,

for keyword in keywords: 
    kw_list = [' '+keyword+',',' '+keyword+' ',' '+keyword+'.','. '+keyword] 
    for kw in kw_list: 
     if kw in text: 
      related_tweet_count += 1 
+0

谢谢!我会试试看。 – ooozooo