python - Python 中的 NLP 短语搜索
问题描述
我浏览过许多图书馆,例如 whoosh/nltk 和 word net 等概念。
但是我无法解决我的问题。我不确定是否可以为此找到一个库,或者我必须使用上述资源来构建它。
问题: 我的场景是我必须搜索关键词。假设我有诸如“销售文件”/“采购文件”之类的关键词,并且必须在 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 现在非常不整洁,一旦完成就会清理它。目前,它仍处于开发阶段。
是链接。
解决方案
要匹配“应记录销售”之类的事件,可以通过增加slop
Whoosh 的 Phrase 查询对象中的参数来完成。
whoosh.query.Phrase(fieldname, words, slop=1, boost=1.0, char_ranges=None) slop – 短语中每个“单词”之间允许的单词数;默认值 1 表示短语必须完全匹配。
您还可以像这样在 Query 中定义 slop:"Sales should be documented"~5
为了匹配第二个示例“公司销售应写入文本文件”,这需要对您的文本进行语义处理。Whoosh 有一个wordnet 词库的低级实现,允许您索引同义词,但它只有一个词的同义词。
推荐阅读
- java - Google Games 可怕的登录权限:“创建、编辑和删除您的 Google Play 游戏活动”
- c# - 错误:目标 11 不允许选项 --boot-class-path
- python - 读取 Dataframewriter Pyspark 编写的 Csv 文件
- javascript - 如何将变量的值从子组件发送到父组件?
- c - gcc 选项:pkg-config --libs --cflags gtk+-3.0
- python - 如何使用python中的标题提取文本文件中的特定行并在函数中返回它?
- c# - 如何优化滚动视图?
- python - 如何在 Python 中将文档 ID 添加到 Firestore 文档
- php - 我域上的管理面板显示错误的用户和密码。数据库,phpmyadmin 相关问题?
- java - 为什么 AsyncTask Connection 不返回任何东西?