簡體   English   中英

如何使用Python-NLTK基於詞匯內容(短語)解析句子

[英]How to parse sentences based on lexical content (phrases) with Python-NLTK

Python-NLTK可以識別輸入字符串並解析它不僅基於空格而且還基於內容? 說,“計算機系統”成為這種情況下的短語。 任何人都可以提供示例代碼嗎?


輸入字符串 :“用戶對計算機系統響應時間的意見調查”

預期輸出 :[“A”,“調查”,“of”,“用戶”,“意見”,“of”,“計算機系統”,“響應”,“時間”]

您正在尋找的技術稱為來自多個子領域的多個名稱或語言學和計算的子子領域。


我將舉例說明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]]]]
  • [計算機系統] [響應時間]
  • [電腦[系統響應時間]]

還有許多可能的解釋。 所以你必須問,你在使用提取的短語是什么,然后看看如何繼續削減像“計算機系統響應時間”這樣的長短語。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM