2011-09-29 62 views
6

我想寫一個算法(我假設將依靠自然語言處理技術)來'填寫'搜索項的列表。這可能是我不知道的這種事情的名稱。這種問題叫什麼,什麼樣的算法會給我下面的行爲?NLP算法來'填寫'搜索條件

輸入:

docs = [ 
    "I bought a ticket to the Dolphin Watching cruise", 
    "I enjoyed the Dolphin Watching tour", 
    "The Miami Dolphins lost again!", 
    "It was good going to that Miami Dolphins game" 
    ], 
    search_term = "Dolphin" 

輸出:

["Dolphin Watching", "Miami Dolphins"] 

應該基本上弄清楚,如果「海豚」出現在所有的,它幾乎總是要麼在雙字母組「觀賞海豚」或「邁阿密海豚」。首選Python解決方案。

+0

你怎麼知道海豚是「海豚觀賞」或「邁阿密海豚?」的一部分?是否因爲每個二元組中的兩個詞都被大寫?或者你有另一個包含所需的bigrams的列表? –

+0

@RobertHarvey:一個好的NLP算法應該能夠解析[邁阿密海豚]作爲一個術語。與[海豚觀賞]相同。當你考慮這個問題時會更容易,就像你將每個短語形成一個問題一樣。問:「你喜歡看什麼遊覽?」答:[海豚觀賞]巡迴賽,問:誰輸了比賽?答:[邁阿密海豚]。你必須把它解析成一棵樹來看看什麼屬於什麼。通過任何方式都不是一個簡單的問題......但是你可以得到一些準確的結果。 – mpen

+0

@RobertHarvey我有一個特定的單詞列表,所以我知道海豚必須在那裏。 – Trindaz

回答

6

基本上應該知道,如果「海豚」出現,它幾乎總是在「海豚觀察」或「邁阿密海豚」的大海里。

聽起來像是你要確定collocations海豚中出現。有用於搭配發現各種方法,最流行的計算術語之間point-wise mutual information(PMI)在你的陰莖,然後選擇其中的條款最高的PMI爲Dolphin。您可能還記得我之前建議的sentiment analysis algorithm的PMI。

NLTK中包含各種搭配查找方法的Python實現,其格式爲nltk.collocations。這個區域在Manning and Schütze's FSNLP(1999,但仍然是這個話題的最新版本)中有一定的深度。

0

我在大學的NLP課堂中使用了Natural Language Toolkit,並取得了不俗的成績。我認爲它有一些標籤可以幫助你確定哪些是名詞,並幫助你將它解析爲一棵樹。我不記得太多,但我會從那裏開始。