如何用PythonNLTK分析基于词汇内容(短语)的句子

2024-03-28 21:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

pythonnltk能识别输入字符串并解析它,不仅基于空白,而且基于内容?“计算机系统”在这种情况下成了一个短语。有人能提供一个示例代码吗?在


输入字符串:“用户对计算机系统响应时间的意见调查”

预期输出:[“A”,“survey”,“of”,“user”,“opinion”,“of”,“computer system”,“response”,“time”]


Tags: of字符串代码用户示例内容时间情况
1条回答
网友
1楼 · 发布于 2024-03-28 21:28:46

你正在寻找的技术被称为来自语言学和计算机的多个子领域或子领域的多个名称。在


我将举一个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中的热门话题,每个人都想从中提取它们
    • Ivan Sag最著名的工作是:http://lingo.stanford.edu/pubs/WP-2001-03.pdf以及各种提取算法和ACL论文中提取用法的乌烟瘴气
    • 由于这个MWE非常神秘,而且我们不知道如何自动分类或正确提取,因此没有合适的工具(奇怪的是,MWE研究人员想要的输出通常可以通过关键字短语提取或分块获得…)


现在回到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')]

因此,即使有了这个解决方案,想要单独获得“计算机系统”似乎也很困难。 但是,如果你想一想,“计算机系统响应时间”是比“计算机系统”更有效的短语。在

难道所有关于计算机系统响应时间的解释都是有效的:

  • [计算机系统响应时间]
  • [计算机[系统[响应[时间]]]
  • [计算机系统][响应时间]
  • [计算机[系统响应时间]]

还有更多可能的解释。所以你要问,你用提取出来的短语做什么,然后看看如何减少像“计算机系统响应时间”这样的长短语。在

相关问题 更多 >