2017-09-05 60 views
-1

我有完成句子的任務,我有主語,動詞,副詞或主語,我需要的是介於兩者之間的適當介詞。是否有任何NLP工具可以分配可與動詞結合的介詞?找到動詞的最佳介詞

最佳

+2

這是關於英文文本,對嗎?介詞是一個封閉的類,這意味着你可以創建一個所有介詞的完整列表(你不能用於名詞或動詞)。如果你知道開放時間段的位置,你可以填寫每個候選者,並使用語言模型來比較每個候選人整個句子的困惑程度。這當然是一種蠻力方法,我相信有更好的方法來做到這一點。 – lenz

回答

2

下面是如何獲得Brown語料庫中所有動詞 - 介詞對的頻率計數,然後查找動詞「go」的動詞 - 介詞對。首先計數:

import nltk 
from nltk.corpus import brown 
prepchoices = nltk.ConditionalFreqDist((v[0], p[0]) 
    for (v, p) in nltk.bigrams(brown.tagged_words(tagset="universal")) 
     if v[1] == "VERB" and p[1] == "ADP") 

「ADP」代表「adposition」,即介詞或post-position。現在,讓我們來看看我們有什麼:

>>> prepchoices["go"] 
FreqDist({'to': 96, 'with': 20, 'into': 18, 'through': 8, 'on': 8, 'for': 7, 
'in': 5, 'out': 4, 'around': 4, 'from': 4, ...}) 

你可以得到的最佳選擇,在按頻率的降序,與most_common()

>>> print(prepchoices["go"].most_common(5)) 
[('to', 96), ('with', 20), ('into', 18), ('through', 8), ('on', 8)] 

我沒有做動詞詞幹任何(「去」和「去」被算作單獨的詞),甚至是摺疊的情況。你可以添加它們,但上面應該已經給你一個分配的體面圖片。

+0

這真的很有幫助。無論如何使用,如果與卦,並找到它們之間的詞? – ida

+0

現在你改變了這個問題!你特別要求「介詞可以和動詞一起分發」。給定一個列表'triples = [(v1,prep1,n1),(v2,prep2,n2),...]',你可以像這樣構造分佈:'nltk.ConditionalFreqDist(((v,n),prep )for v,prep,n in triples)'。現在'(v,n)'元組是鍵。但(a)你將需要*很多更多的數據才能獲得可靠的分配,並且(b)通常名詞不會立即跟隨準備,所以你必須做好找到它的工作。我的預測是,最好忽略名詞,並使用上述。 – alexis

+0

如果你真的**需要名詞,我會建立一個單獨的'(名詞,準備)'條件分配表,並使用它們來計算完成的頻率。不過,您仍然需要在訓練語料庫中的每個準備之後找到名詞。無論如何,你現在知道如何將'nltk'應用於你的問題。其餘的由你決定。 – alexis

0

聽說NLTK是有用的,但我相信你可以找到很多公共Github上回購的,如果你搜索。出現的一些結果是TextBlob,標準核心NLP,spaCy,genism。

+0

我已經看過這些庫,但我不知道它們是否提供介詞 - 動詞關係 – ida

0

可能想法:

隨着完成句子的語料庫:

  • 提取所有的雙字母組從語料從二元語法
  • 提取介詞
  • 款待介詞如類和訓練分類預測來自其他標記的介詞
  • 將分類器應用於新數據

不知道它是如何工作的,因爲我從來沒有嘗試過。儘管所有這些都可以使用spacy + sklearn完成。

+0

如果動詞是唯一的預測功能,則無需打擾分類器。直接使用頻率。 – alexis