【发布时间】:2019-03-26 15:00:28
【问题描述】:
我有一个包含大约 100 个关键字的列表,我需要在超过 10 万个文档的庞大语料库中搜索它们。
我不想要完全匹配,例如如果关键字是增长基金,我希望所有匹配项,如增长基金、美国增长基金等。
对此有什么建议吗?
我尝试使用 spacy 的 PhraseMatcher,但它给出了 ValueError: [T001] Max length current 10 for phrase matching。
import spacy
from spacy.matcher import PhraseMatcher
full_funds_list_flat = "<list of 100+ Keywords>"
nlp = spacy.load('en_core_web_sm')
keyword_patterns = [nlp(text) for text in full_funds_list_flat]
matcher = PhraseMatcher(nlp.vocab)
matcher.add('KEYWORD', None, *keyword_patterns)
【问题讨论】:
-
也许考虑到 lakh 在世界大部分地区并不是一个众所周知的量词。
-
@ChristianSloper 我的错,已编辑
-
@KeshavKumar 欢迎。有趣的问题。你能展示你尝试过的东西吗?此外——还有一些概念可能会有所帮助——词形还原、命名实体分块和并行化。前两个在 NLP 的任何好的介绍中都得到了解决。后者只是大型语料库的常识。
-
@fiacre 谢谢 :) 用我尝试过的代码编辑了问题。在将令牌传递给短语匹配器之前,我正在对令牌进行词形还原。至于命名实体分块,由于我必须找到的单词列表不属于任何预定义的命名实体,甚至我无法手动标记数据,因此训练自定义 NER 模型似乎很困难。非常感谢,如果还有其他问题,请提出建议。
标签: python nlp nltk spacy named-entity-recognition