回答
下面是如何獲得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)]
我沒有做動詞詞幹任何(「去」和「去」被算作單獨的詞),甚至是摺疊的情況。你可以添加它們,但上面應該已經給你一個分配的體面圖片。
這真的很有幫助。無論如何使用,如果與卦,並找到它們之間的詞? – ida
現在你改變了這個問題!你特別要求「介詞可以和動詞一起分發」。給定一個列表'triples = [(v1,prep1,n1),(v2,prep2,n2),...]',你可以像這樣構造分佈:'nltk.ConditionalFreqDist(((v,n),prep )for v,prep,n in triples)'。現在'(v,n)'元組是鍵。但(a)你將需要*很多更多的數據才能獲得可靠的分配,並且(b)通常名詞不會立即跟隨準備,所以你必須做好找到它的工作。我的預測是,最好忽略名詞,並使用上述。 – alexis
如果你真的**需要名詞,我會建立一個單獨的'(名詞,準備)'條件分配表,並使用它們來計算完成的頻率。不過,您仍然需要在訓練語料庫中的每個準備之後找到名詞。無論如何,你現在知道如何將'nltk'應用於你的問題。其餘的由你決定。 – alexis
聽說NLTK是有用的,但我相信你可以找到很多公共Github上回購的,如果你搜索。出現的一些結果是TextBlob,標準核心NLP,spaCy,genism。
我已經看過這些庫,但我不知道它們是否提供介詞 - 動詞關係 – ida
- 1. 介紹同義詞「自動」
- 2. Perl模塊查找單詞是否是動詞/名詞/形容詞/文章/介詞
- 3. 動詞連接介詞短語的語義序言
- 4. 如何從我的文本中刪除動詞,介詞,連詞等?
- 5. 找到網站中最常用的詞
- 6. 找不到最頻繁的詞
- 7. 如何找到最大的詞梯?
- 8. 尋找最匹配的詞
- 9. 找到一個詞的詞根
- 10. 使用wordnet獲取單詞的最佳同義詞
- 11. 查找多詞詞組的同義詞
- 12. 找不到詞典關鍵詞
- 13. 從詞典中找到多個詞的詞
- 14. 什麼是texmaker的最佳詞典?
- 15. 尋找單詞組合的最佳算法?
- 16. 如何命名爲形容詞或介詞的Rails資源?
- 17. 使用詞網找到沒有名詞同義詞或至少有一個名詞同義詞的詞條
- 18. Lucene的尋找最頻繁的單詞或單詞組
- 19. 找到流中的單詞?
- 20. 查找兩個給定詞和詞典之間的最短詞梯
- 21. 找到所有形式的單詞的最佳方式是什麼?
- 22. 找到一個字符串的完整單詞的最佳方法
- 23. 在詞典中查找最匹配的單詞
- 24. 在Haskell中查找單詞序列中最長的單詞
- 25. 最佳單詞包裝算法?
- 26. 可以自動找到停用詞嗎?
- 27. Java的屬性與邏輯介詞
- 28. C#詞典到詞典自動翻譯
- 29. J,不易動詞動詞
- 30. Python:找到文本中單詞列表的最佳/有效方式?
這是關於英文文本,對嗎?介詞是一個封閉的類,這意味着你可以創建一個所有介詞的完整列表(你不能用於名詞或動詞)。如果你知道開放時間段的位置,你可以填寫每個候選者,並使用語言模型來比較每個候選人整個句子的困惑程度。這當然是一種蠻力方法,我相信有更好的方法來做到這一點。 – lenz