您好,下面是我的代码,用于删除停用词并获取包含技术相关术语(如 java、lan、端口、套接字等)的文本的命名实体
import nltk
from nltk.corpus import stopwords
import codecs
import os
import base64
def stop_final():
result=[]
text="some technology related text"
text = nltk.word_tokenize(text)
for word in text:
if word not in stopwords.words('english'):
result.append(word)
print nltk.ne_chunk(nltk.pos_tag(result))
stop_final()
从上面的代码中,我得到了 lan、socket 等的 Person 实体,所以我没有得到准确的结果,所以请建议我如何为我的文本获得正确的命名实体
谢谢
最佳答案
晚了,但还是来了。此外,这不是解决方案,更多的是对问题的解释,并试图为读者指明正确的方向。希望这对某人有帮助。
NLTK 在该模块中使用停用词字典,因此不会过滤您要查找的所有内容。您必须考虑分配 POS tags根据您的话过滤与您的问题无关的类型。
但是,您正在寻找既可以是名词又可以是专有名词的术语。因此,Java 和 Ian 都会通过。问题是 POS 标签不包含您正在寻找的额外信息,即这些词应该与技术相关。
这是一个非常难以高精度解决的问题,因为您需要从文本中推断出上下文。这是自然语言处理(NLP)和机器学习领域当前的一个研究问题。
可能的解决方案可能包含以下一些技术。
您可以开始构建自己的停用词列表,方法是在发现单词时将其添加到列表中(在 POS 标签过滤之后)。这既乏味又容易出错,但比其他方法更简单。
在 NLP 中有一种称为名称实体解析的方法,您可以查看。
此外,结帐 Goolge's Ngram corpus viewer .他们用它做了一些有趣的事情。
关于python - nltk语料库应该使用什么来识别技术相关文本的pos标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010582/