赞
踩
你正在寻找的技术被称为来自语言学和计算机的多个子领域或子领域的多个名称。在分块从自然语言处理来看,也叫浅层分析
主要的NLP框架和工具包应该有它们(例如OpenNLP,GATE,NLTK*(注意NLTK的默认分块器只适用于名称实体))
我将举一个NLTK中的NE chunker示例:>>> from nltk import word_tokenize, ne_chunk, pos_tag
>>> sent = "A survey of user opinion of computer system response time"
>>> chunked = ne_chunk(pos_tag(word_tokenize(sent)))
>>> for i in chunked:
... print i
...
('A', 'DT')
('survey', 'NN')
('of', 'IN')
('user', 'NN')
('opinion', 'NN')
('of', 'IN')
('computer', 'NN')
('system', 'NN')
('response', 'NN')
('time', 'NN')
使用命名实体:
^{pr2}$
你可以看到它有很多缺陷,我想总比没有好。在多词表达式提取NLP中的热门话题,每个人都想从中提取它们
由于这个MWE非常神秘,而且我们不知道如何自动分类或正确提取,因此没有合适的工具(奇怪的是,MWE研究人员想要的输出通常可以通过关键字短语提取或分块获得…)术语提取这源于翻译研究,他们希望译者在翻译文档时使用正确的技术词汇。在
请注意,术语与ISO标准有着密不可分的关系,人们应该遵循这些标准,因为复杂的翻译行业创造了数十亿美元的收入。。。在
单语言方面,我不知道是什么使它们不同于术语提取器,相同的算法,不同的界面。。。我想一些术语抽取器的唯一功能就是能够双语并自动生成词典。在
现在回到OP的问题上来。在
问:NLTK能否将“计算机系统”作为一个短语提取出来?
A:不是真的
如上所示,NLTK有预先训练过的chunker,但它适用于名称实体,即使如此,并不是所有命名实体都能被很好地识别。在
也许OP可以尝试更激进的想法,让我们假设一系列的名词总是组成一个短语:>>> from nltk import word_tokenize, pos_tag
>>> sent = "A survey of user opinion of computer system response time"
>>> tagged = pos_tag(word_tokenize(sent))
>>> chunks = []
>>> current_chunk = []
>>> for word, pos in tagged:
... if pos.startswith('N'):
... current_chunk.append((word,pos))
... else:
... if current_chunk:
... chunks.append(current_chunk)
... current_chunk = []
...
>>> chunks
[[('computer', 'NN'), ('system', 'NN'), ('response', 'NN'), ('time', 'NN')], [('survey', 'NN')], [('user', 'NN'), ('opinion', 'NN')]]
>>> for i in chunks:
... print i
...
[('computer', 'NN'), ('system', 'NN'), ('response', 'NN'), ('time', 'NN')]
[('survey', 'NN')]
[('user', 'NN'), ('opinion', 'NN')]
因此,即使有了这个解决方案,想要单独获得“计算机系统”似乎也很困难。
但是,如果你想一想,“计算机系统响应时间”是比“计算机系统”更有效的短语。在
难道所有关于计算机系统响应时间的解释都是有效的:[计算机系统响应时间]
[计算机[系统[响应[时间]]]
[计算机系统][响应时间]
[计算机[系统响应时间]]
还有更多可能的解释。所以你要问,你用提取出来的短语做什么,然后看看如何减少像“计算机系统响应时间”这样的长短语。在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。