Python 中的 NLP 短语搜索



我已经浏览了许多库,如whoosh/nltk和单词网络等概念。

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

问:我的场景是我必须搜索关键字。 假设我有"销售文档"/"采购文档"等关键字,必须在一本 10-15 页的小书中搜索它们。

问题是:现在,它们也可以写成"销售应记录在案"或"公司销售应写入文本文件"。(对于销售文档 - 关键字(这里有一种方法还是我必须构建一些东西?

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现在非常不整洁,一旦完成就会清理它。 目前,它仍处于开发阶段。

这是链接。

若要匹配"应记录销售">之类的实例,可以通过增加 Whoosh 的短语查询对象中的slop参数来完成此操作。

whoosh.query.Phrase(fieldname, words, slop=1, boost=1.0, char_ranges=None( slop – 短语中每个"单词"之间允许的单词数;默认值 1 表示短语必须完全匹配。

您还可以在 Query 中定义 slop,如下所示:"Sales should be documented"~5


为了匹配第二个示例"公司销售应写入文本文件">,这需要对您的文本进行语义处理。Whoosh 有一个 wordnet 同义词库的低级实现,允许您索引同义词,但它只有一个单词同义词。

最新更新