找到识别句子

时间:2016-07-12 03:01:26

标签: python python-3.x nltk

我希望在一个基于序列的句子中找到两个单词列表。我想检查是否可以使用"正则表达式"或者我应该用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. "

我想找到如下的任何模式:

  • n_ali + positive_adj
  • n_ali + negative_adj
  • n_leyla + positive_adj
  • n_leyla + negative_adj

我在VS2015中使用python 3.5,我是NLTK的新手。我知道如何创建一个"正则表达式"检查一个单词,但我不确定什么是类似名称列表的最佳方法。请帮助我,并建议我实施这种方法的最佳方法是什么。

1 个答案:

答案 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', '.']

好的,现在你拥有了你想要的数据(大部分)。让我们使用简单的循环来分别为alileila存储结果。

>>> 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因为“很多”不是停用词。您可能必须手动执行此类清理。