我有一个单词列表,只想保留名词。
这不是Extracting all Nouns from a text file using nltk
的副本在链接的问题中,将处理一段文本。接受的答案提出了一个标记器。我知道用于标记文本的不同选项(nlkt,textblob,spacy),但是我无法使用它们,因为我的数据不包含句子。我只有一个单词列表:
would
research
part
technologies
size
articles
analyzes
line
nltk
具有多种语料库。我发现verbnet
带有完整的动词列表。但是到目前为止,我没有看到与名词相似的东西。是否有类似字典的内容,如果单词是名词,动词,形容词等,我可以在其中查找吗?
这可以通过某些在线服务来完成。例如,Microsoft翻译在其回复中返回了很多信息:https://docs.microsoft.com/en-us/azure/cognitive-services/translator/reference/v3-0-dictionary-lookup?tabs=curl 但这是一项付费服务。我希望有一个python包。
关于单词的歧义:理想情况下,我想要一本字典,该词典可以告诉我单词可以具有的所有功能。例如,“鱼”既是名词又是动词。 “吃”仅是动词,“狗”仅是名词。我知道这不是一门精确的科学。一个可行的解决方案将只是删除所有不能为名词的单词。
答案 0 :(得分:1)
即使您使用字典,也将始终要处理歧义,例如,根据上下文,相同的单词可以是noun
或verb
,单词{{ 1}}
政府将投资
research
。目标是
research
POS标记的新技术。
大多数词典对research
的定义不只一个,例如:
这些词是从哪里来的,您能否在它们出现的上下文中对它们进行标记?
答案 1 :(得分:1)
您可以在单个片段上运行POS标记器,它的准确性较低,但我想这已经是已知的了。
理想情况下,找到一个POS标记器,该标记器稍后会在处理管道中显示所有可能的读数,以消除语法上的歧义。基本上,这只是从词典中挑选出所有可能的读数(也许有一定的可能性),然后再从那里获取。
答案 2 :(得分:0)
正如@Triplee和@DavidBatista指出的那样,仅凭单词本身来判断一个单词是名词还是动词真的很复杂,因为在大多数语言中,单词的语法取决于上下文。
单词只是意义的表示。因此,我想添加另一个可能符合您的意思的命题-与其尝试找出一个单词是名词还是动词,不如找出一个概念是一个对象还是一个动作,而不是试图找出一个概念。由于概念可以同时包含动作或对象形式,因此存在模棱两可的问题。
但是,您可以坚持只具有对象属性的概念(例如TypeOf,HasAsPart,IsPartOf等)或同时具有对象和动作属性的概念(例如子事件,效果,Requires等动作属性)。
Conceptnet是一个很好的概念搜索工具,它提供了一个WebApi来通过关键字在其网络中搜索概念(它基于Wikipedia和许多其他站点,并且对于英语非常完整),已经开放并指向其他语言中的同义词(被标记为它们的公共POS-您可以对同义词的POS求平均以尝试找出单词是对象(类似于名词)还是动作(类似于动词))
答案 3 :(得分:0)
尝试使用wordnet吗?
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 64) 50240
_________________________________________________________________
dense_2 (Dense) (None, 10) 650
=================================================================
Total params: 50,890
Trainable params: 50,890
Non-trainable params: 0
_________________________________________________________________
您应该看到:
from nltk.corpus import wordnet
words = ["would","research","part","technologies","size","articles","analyzes","line"]
for w in words:
syns = wordnet.synsets(w)
print(w, syns[0].lexname().split('.')[0]) if syns else (w, None)