下面是我的代码,用于删除停止字并获取文本的命名实体,其中包含与技术相关的术语,如java、lan、port、socket等

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在该模块中使用了一个stopwords字典,这样就不会过滤您要查找的所有内容。你必须考虑给你的单词指定POS tags并过滤与你的问题无关的类型。
但是,您正在寻找既可以是名词又可以是专有名词的术语。因此,Java和Ian都能通过。问题是POS标签不包含您要查找的额外信息,即这些词应该与技术相关。
这是一个极其困难的问题,以高精度解决,因为你将需要推断出你的文本上下文。这是目前自然语言处理(NLP)和机器学习领域的一个研究问题。
可能的解决方案可能包含以下一些技术。
您可以开始构建自己的非索引词列表,方法是在您发现它们时将它们添加到列表中(在POS标记筛选之后)。这是乏味和容易出错的,但比其他选择更简单。
NLP中有一些称为名称实体解析的方法,您可以查看这些方法。
另外,签出Goolge's Ngram corpus viewer。他们做了一些有趣的事情。

关于python - 什么nltk语料库应该用来识别技术相关文本的pos标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18010582/

10-12 18:42