我希望在一个基于序列的句子中找到两个单词列表。我想检查是否可以使用"正则表达式"或者我应该用if条件检查句子?
n_ali = set(['ali','aliasghar'])
n_leyla = set(['leyla','lili',leila])
positive_adj = set(['good','nice','handsome'])
negative_adj = set(['bad','hate','lousy'])
Sentence = "aliasghar is nice man. ali is handsome man of my life. lili has so many bad attitude who is next to my friend. "
我想找到如下的任何模式:
我在VS2015中使用python 3.5,我是NLTK的新手。我知道如何创建一个"正则表达式"检查一个单词,但我不确定什么是类似名称列表的最佳方法。请帮助我,并建议我实施这种方法的最佳方法是什么。
答案 0 :(得分:1)
您应该考虑删除停用词。
import nltk
from nltk.corpus import stopwords
>>> words = [word for word in nltk.word_tokenize(sentence) if word not in stopwords.words('english')]
>>> words
['aliasghar', 'nice', 'man', '.', 'ali', 'handsome', 'man', 'life', '.', 'lili', 'many', 'bad', 'attitude', 'next', 'friend', '.']
好的,现在你拥有了你想要的数据(大部分)。让我们使用简单的循环来分别为ali
和leila
存储结果。
>>> ali_adj = []
>>> leila_adj = []
>>> for i, word in enumerate(words[:-1]):
... if word in n_ali and (words[i+1] in positive_adj.union(negative_adj)):
... ali_adj.append((word, words[i+1]))
... if word in n_leyla and (words[i+1] in positive_adj.union(negative_adj)):
... leila_adj.append((word, words[i+1]))
...
>>>
>>> ali_adj
[('aliasghar', 'nice'), ('ali', 'handsome')]
>>> leila_adj
[]
请注意,我们找不到任何形容词来描述leila
因为“很多”不是停用词。您可能必须手动执行此类清理。