我有一份产品清单,我试图将其归类为类别。他们将用不完整的句子来描述,如:
"固态硬盘外壳"
"硬盘线"
" 1TB Hard Drive"
" 500GB硬盘,由制造商翻新"
如何使用python和NLP获取类似" Housing,Cable,Drive,Drive"或者描述哪个词正在修改哪一个的树? 提前谢谢
答案 0 :(得分:2)
NLP技术相对不适合处理这种文本。
换句话说:很有可能构建一个包含NLP流程的解决方案来实现所需的分类器,但增加的复杂性不一定会在开发速度和分类器精度改进方面得到回报。 如果一个人真的坚持使用NLP技术,POS标记及其识别名词的能力是最明显的想法,但是Chunking和访问WordNet或其他词汇来源是NLTK的其他合理用途。
相反,基于简单正则表达式的特殊解决方案以及 NoBugs 建议的一些启发式方法可能是解决问题的合适方法。当然,这样的解决方案有两个主要风险:
对要考虑的文本的完整(或非常大的样本)进行一些简单的静态分析应该有助于指导一些启发式的选择,并避免过度拟合的问题。我很确定与自定义词典相关的相对少量的规则应该足以产生具有适当精度以及速度/资源性能的分类器。
一些想法:
我担心这个答案不能提供Python / NLTK片段作为解决方案的入门,但坦率地说,这种简单的基于NLTK的方法可能会令人失望。此外,我们应该有一个更大的输入文本样本集来指导选择合理的方法,包括基于NLTK或NLP技术的方法。
答案 1 :(得分:1)
我会手动创建一个名词列表,包含您要查找的所有名词,或者解析一个字典,例如this one。除了名词之外的所有内容都至少会让你进入“状态驱动器”,“驱动器电缆”或“驱动器”,在第一个标点符号后忽略所有内容。
答案 2 :(得分:0)
pip install spacy
python -m spacy下载zh 进口杂货
nlp = spacy.load('en')
sent = "INCOMEPLETE SENTENCE HERE"
doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ == "ROOT") ]
示例:
sent = "Solid State Drive Housing"
doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ == "ROOT") ]
输出:[房屋]
sent = "Hard Drive Cable"
doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ == "ROOT") ]
输出:[电缆]
sent = "1TB Hard Drive"
doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ == "ROOT") ]
输出:[驱动器]
sent = "500GB Hard Drive, Refurbished from Manufacturer"
doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ == "ROOT") ]
输出:[驱动器]
答案 3 :(得分:0)
用不完整的句子替换文本。
import spacy
import en_core_web_sm
nlp = spacy.load('en_core_web_sm')
sentence = "I need to be able to log into the Equitable siteI tried my username and password from the AXA Equitable site which worked fine yesterday but it won't allow me to log in and when"
nlp_doc=nlp(sentence)
subject = [tok for tok in nlp_doc if (tok.dep_ == "nsubj") ]
print(subject)