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

如何使用Python-NLTK解析基于词法内容(短语)的句子,第1张

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

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

  • 关键短语提取
    • 从信息检索中,主要用于改善搜索的索引/查询
    • 阅读这份最新调查报告:http : //www.hlt.utdallas.edu/~saidul/acl14.pdf
    • (我个人)强烈建议:https : //pre.google.com/p/jatetoolkit/,当然还有著名的https://pre.google.com/p/kea-algorithm/(来自为您带来WEKA的人,http://www.cs.waikato.ac.nz/ml/weka/)
    • 对于python,可能是https://github.com/aneesha/RAKE

  • 块状
    • 在自然语言处理中,也称为浅层解析,
    • 阅读史蒂夫·阿伯尼(Steve Abney)关于它如何实现的工作:http : //www.vinartus.net/spa/90e.pdf
    • 主要的NLP框架和工具包应具有它们(例如OpenNLP,GATE,NLTK *(请注意,NLTK的默认分块器仅适用于名称实体))
    • 斯坦福大学NLP也有一个:http : //nlp.stanford.edu/projects/shallow-parsing.shtml

我将举例说明NLTK中的NE块:

>>> 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以及各种各样的提取算法和从ACL论文中提取出的用法的偏见
    • 尽管这个MWE非常神秘,而且我们不知道如何自动对它们进行分类或正确地提取它们,但没有合适的工具(奇怪的是,MWE的输出研究人员通常希望通过Keyphrase Extraction或chunking获得… )

  • 术语提取

    • 这来自翻译研究,他们希望翻译人员在翻译文档时使用正确的技术词。
    • 请注意,术语伴随着ISO标准的聚宝盆,由于繁复的翻译行业产生了数十亿的收入,因此应遵循ISO标准。
    • 从语言上讲,我不知道是什么使它们与术语提取器,相同的算法,不同的接口有所不同……我想某些术语提取器的唯一优势就是能够双语执行并自动生成字典。
    • 这是一些工具

    • https://github.com/srijiths/jtopia和

    • http://fivefilters.org/term-extraction/
    • https://github.com/turian/topia.termextract
    • https://www.airpair.com/nlp/keyword-extraction-tutorial
    • http://termcoord.wordpress.com/about/testing-of-term-extraction-tools/free-term-extractors/
    • 关于工具的注意事项:尽管没有一种工具能在术语提取中脱颖而出。并且由于涉及大量资金,因此总是进行一些API调用,并且大多数代码是“半开放的” ..大多是封闭的。再说一次,SEO也是一笔巨款,可能只是翻译行业中超级神秘的文化事物。

现在回到OP的问题。

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

答: 不是真的

如上所示,NLTK具有预先训练的分块器,但它适用于名称实体,即使如此,并不是所有的命名实体都能被很好地识别。

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')]

因此,即使有了该解决方案,似乎也很难尝试单独获得“计算机系统”。但是,如果您想一想,获得“计算机系统响应时间”似乎比“计算机系统”更有效。

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

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

还有许多其他可能的解释。因此,您必须要问,您将提取的短语用于什么,然后查看如何继续剪切诸如“计算机系统响应时间”之类的长短语。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5632108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存