如何使用Python-NLTK基于词汇内容(短语)解析句子

时间:2014-12-01 17:56:21

标签: python nltk lexical

Python-NLTK可以识别输入字符串并解析它不仅基于空格而且还基于内容?说,"计算机系统"在这种情况下成了短语。任何人都可以提供示例代码吗?


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

预期输出:[" A","调查","","用户", "意见","","计算机系统","响应","时间"]

1 个答案:

答案 0 :(得分:18)

您正在寻找的技术称为多个子领域或语言学和计算子领域的多个名称。


我将举例说明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')

使用命名实体:

>>> sent2 = "Barack Obama meets Michael Jackson in Nihonbashi"
>>> chunked = ne_chunk(pos_tag(word_tokenize(sent2)))
>>> for i in chunked:
...     print i
... 
(PERSON Barack/NNP)
(ORGANIZATION Obama/NNP)
('meets', 'NNS')
(PERSON Michael/NNP Jackson/NNP)
('in', 'IN')
(GPE Nihonbashi/NNP)

你可以看到它有很多缺陷,我认为它比什么都好。


  • 多字表达式提取
    • NLP中的热门话题,每个人都想出于某种原因提取它们
    • Ivan Sag最值得注意的作品:http://lingo.stanford.edu/pubs/WP-2001-03.pdf以及各种提取算法的m气和ACL论文的提取用法
    • 尽管这个MWE非常神秘,我们不知道如何自动分类或正确提取它们,但是没有适当的工具(奇怪的是,MWE的输出研究人员通常希望通过Keyphrase Extraction或chunking获得...)


现在回到OP的问题。

问:可以NLTK提取"计算机系统"作为短语?

答:不是

如上所示,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')]

因此,即使使用该解决方案,似乎也在尝试使用“计算机系统”。一个人很难。 但是,如果您认为有点像计算机系统的响应时间'是比计算机系统更有效的短语'。

并非所有对计算机系统响应时间的解释都是有效的:

  • [计算机系统响应时间]
  • [computer [system [response [time]]]]
  • [计算机系统] [响应时间]
  • [计算机[系统响应时间]]

还有许多可能的解释。因此,您必须询问,您使用所提取的短语是什么,然后了解如何继续剪切诸如计算机系统响应时间之类的长短语。