[英]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)
我猜你可以看到它有很多缺陷,更好的東西比什么都沒有。
術語提取
這是一些工具
現在回到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')]
因此,即使使用該解決方案,似乎只是試圖讓“計算機系統”變得困難。 但是,如果你認為有點像“計算機系統響應時間”是一個比“計算機系統”更有效的短語。
難道並非所有對計算機系統響應時間的解釋都是有效的:
還有許多可能的解釋。 所以你必須問,你在使用提取的短語是什么,然后看看如何繼續削減像“計算機系統響應時間”這樣的長短語。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.