当前位置: 首页 > 面试题库 >

使用NLTK WordNet查找专有名词

方长卿
2023-03-14
问题内容

是否可以使用NLTK WordNet查找专有名词?即可以使用nltk Wordnet标记所有名词吗?


问题答案:

我认为您不需要WordNet来查找专有名词,我建议使用词性标记器pos_tag

要查找专有名词,请寻找NNP标签:

from nltk.tag import pos_tag

sentence = "Michael Jackson likes to eat at McDonalds"
tagged_sent = pos_tag(sentence.split())
# [('Michael', 'NNP'), ('Jackson', 'NNP'), ('likes', 'VBZ'), ('to', 'TO'), ('eat', 'VB'), ('at', 'IN'), ('McDonalds', 'NNP')]

propernouns = [word for word,pos in tagged_sent if pos == 'NNP']
# ['Michael','Jackson', 'McDonalds']

您可能没有,因为很满意Michael,并Jackson分裂成2个令牌,则可能需要更复杂的东西,如名称实体恶搞。

penntreebank标签集所记录的那样,对于所有格名词而言,只要找到POS标签,您就可以轻松找到http://www.mozart-
oz.org/mogul/doc/lager/brill-tagger/penn.html
。但往往是恶搞不标记POS时,它的一个NNP

要查找所有名词,请查找str.endswith(“’s”)或str.endswith(“ s’”):

from nltk.tag import pos_tag

sentence = "Michael Jackson took Daniel Jackson's hamburger and Agnes' fries"
tagged_sent = pos_tag(sentence.split())
# [('Michael', 'NNP'), ('Jackson', 'NNP'), ('took', 'VBD'), ('Daniel', 'NNP'), ("Jackson's", 'NNP'), ('hamburger', 'NN'), ('and', 'CC'), ("Agnes'", 'NNP'), ('fries', 'NNS')]

possessives = [word for word in sentence if word.endswith("'s") or word.endswith("s'")]
# ["Jackson's", "Agnes'"]

另外,您可以使用NLTK,ne_chunk但是除非您担心从句子中获得哪种专有名词,否则它似乎没有其他作用:

>>> from nltk.tree import Tree; from nltk.chunk import ne_chunk
>>> [chunk for chunk in ne_chunk(tagged_sent) if isinstance(chunk, Tree)]
[Tree('PERSON', [('Michael', 'NNP')]), Tree('PERSON', [('Jackson', 'NNP')]), Tree('PERSON', [('Daniel', 'NNP')])]
>>> [i[0] for i in list(chain(*[chunk.leaves() for chunk in ne_chunk(tagged_sent) if isinstance(chunk, Tree)]))]
['Michael', 'Jackson', 'Daniel']

使用ne_chunk有点冗长,并不能使您拥有所有格。



 类似资料:
  • 性能相关 防抖和节流 滚动穿透 样式相关 多行文字截断

  • 问题内容: 当LastDate中存在差异时,以下SQL可用于识别唯一的电话。但是,如果重复的电话具有完全相同的LastDate,则它将不起作用。 任何想法将不胜感激。 问题答案: 更改为。

  • 是否有一种方法可以从C#访问私有(即未安装)字体的字形宽度而不求助于以下内容:如何通过解析TTF字体文件获得字形宽度?

  • 问题内容: 什么是运营商的正确名称,如?打开包装,解压缩,还有其他东西吗? 问题答案: 在Ruby和Perl 6中,这被称为,我认为那些社区的大多数人都会明白你的意思。 在Python的教程使用短语“拆包参数列表”,这是长和描述。我在Python中还没有听说过其他特殊名称。

  • 我尝试单击以下元素,类名等于<code>“clean right”: 如何使用<code>驱动程序定位它。find_element_by_class_name()

  • 我正在使用OpenNLP的NameFinder API示例文档。初始化名称查找器后,文档使用以下代码作为输入文本: 然而,当我将其引入eclipse时,“documents”(而不是“document”)变量给了我一个错误,表示变量documents无法解析。“documents”数组变量所指的文档是什么?我是否需要初始化一个名为“documents”的数组,该数组包含txt文件,以消除此错误?