2012-06-28 114 views
2

我想爲PHP中的類似單詞製作文本掃描程序,但我不知道從哪裏開始。掃描儀必須掃描段落並指出數據庫中找到的匹配項,或者提出有助於使本段更好的特定字詞。PHP文本掃描儀如何?

我一開始以爲我可以使用數據庫和搜索引擎腳本,但我被告知這不是實現它的方式。

有人能請我指出正確的方向,所以我可以開始在這方面的工作?

+0

詞義(例如攜帶,攜帶,攜帶)或類似含義(如汽車,車輛,運輸)? –

+0

類似於汽車,車輛,運輸 – Panki0

+0

所以你正在尋找一個synonims搜索引擎? – HBv6

回答

1

我只是發表了另一個答案,因爲我的第一個錯誤的OP評論後,它有太多的評論。

首先,你需要從你的款推斷每一個字,例如使用:

$words_array = explode(" ", $paragraph); 

然後,你需要刪除特殊字符,斜線,點,逗號等(可能使用str_replace())。

在第二個步驟,你需要建立同義詞這樣的數據庫:

| id | word | synonyms | 
| 0 | car | vehicle | 
| 1 | car | transport | 

然後像做(爲你的段落中的每個單詞):

SELECT synonyms FROM table WHERE word="car" 

並在此之後,你可以獲取結果。

但是這只是開始。您需要需要來優化此方法。例如:您可以在搜索車輛時返回汽車。運輸也一樣。這取決於你!

+0

非常感謝Pierpaolo。這個概念似乎有訣竅..我會放棄它! – Panki0

+1

不幸的是我不能投這個建議,因爲我的聲望點低於15 ..但在這一個+1!謝謝! – Panki0

+0

一個簡單的文本*掃描儀*可以用['strtok'](http://php.net/manual/en/function.strtok.php)來編譯,手冊就是一個例子,如何在空格處分割字符串。 – hakre

0

你已經試過similar_text()?它非常易於使用,您可以輕鬆地使用DB(其中DB可能是文本文件,SQL DB甚至是數組)。

快速例如:

// you have to call this function multiple times for each word of the paragraph and for each word of your DB of suggestions 
function suggest ($word_of_the_paragraph, $word_taken_from_a_DB) { 
    similar_text($word_of_the_paragraph, $word_taken_from_a_DB, $percent); 
    if ($percent >= $threshold) { 
     echo $word_taken_from_a_DB; // this is the suggested word 
    } 
} 
+0

從PHP文檔引用:'這會計算兩個字符串之間的相似性,注意「** two **」。 OP的問題是關於在同一個字符串中找到相似的單詞。您的回答沒有提供任何有關該主題的信息。因此,投下了票。坦率地說,我覺得有人高舉它是很奇怪的,只是因爲我投下了它並不意味着我是邪惡的,或者我恨你。這就是這個社區(SO)的工作方式。 – Adi

+0

我還是不明白。您可以掃描段落的每個單詞,並將其與數據庫(文本文件,數組,MySQL等)進行多次比較。然後你可以像我發佈的方式處理它(我編輯了我的文章)。 – HBv6

+0

我被告知,正確的方法是使用某種解析器..我真的不知道..我很困惑.. – Panki0

2

在文本搜索相似性才能真正艱苦的工作。 如果要搜索段落,然後檢查數據庫中是否有類似的文本,我建議使用「tfidf」算法。我在論文中使用它,它確實工作得很好。

但是,沒有「主」算法可以滿足您的所有需求。這是很多研究,它總是取決於您將使用的文本的屬性。 關於NLP的一些知識也可以幫助解決這些問題。

對於只找到單詞similarites我會使用類似this。 希望他的幫助。

+0

這是有趣的..我將不得不通過您的建議..感謝您的輸入.. – Panki0