Python中的NLP短语搜索

时间:2018-05-29 19:45:58

标签: python nlp nltk wordnet whoosh

我一直在经历许多像whoosh / nltk这样的图书馆以及像word net这样的概念。

但是我无法解决我的问题。我不确定我是否可以找到这个库,或者我必须使用上面提到的资源来构建它。

问题: 我的情况是我必须搜索关键词。 说我有关键词,如销售文件' /'购买文件'并且必须在10-15页的小书中搜索它们。

问题是: 现在,它们也可以写成“销售应该记录在案”和“#39;或者'公司销售应该写在文本文件中。 (对于销售文档 - 关键字)这里有方法还是我必须构建一些东西?

POS标签的代码如下。如果没有可用的库,我将继续这样做。

from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
from pandas import Series
import nltk
from nltk.corpus import wordnet

def tag(x):
    return pos_tag(word_tokenize(x))



synonyms = []
antonyms = []

for syn in wordnet.synsets("Sales document"):
    #print("Down2")
    print (syn)
    #print("Down")
    for l in syn.lemmas():
        print(" \n")
        print(l)
        synonyms.append(l.name())
        if l.antonyms():
            antonyms.append(l.antonyms()[0].name())

print(set(synonyms))
print(set(antonyms))

for i in synonyms:
    print(tag(i))

更新 我们继续做了一个python程序 - 随意分叉。 (双关语) 此外,Git Dhund现在非常不整洁,一旦完成就会清理它。 目前它仍处于开发阶段。

link

1 个答案:

答案 0 :(得分:2)

要匹配诸如“应记录销售记录” 之类的事件,可以通过在Whoosh的词组查询对象中增加slop参数来实现。

  

whoosh.query.Phrase(字段名称,单词,slop = 1,boost = 1.0,char_ranges = None)   slop –短语中每个“单词”之间允许的单词数;默认值1表示词组必须完全匹配。

您还可以在Query中这样定义坡度:"Sales should be documented"~5


要匹配第二个示例“公司销售应写在文本文件中” ,这需要对文本进行语义处理。 Whoosh具有wordnet thesaurus的低级实现,以允许您索引同义词,但只有一个单词的同义词。