2011-04-13 90 views
7

我想解析一個PHP中的純文本文檔,但不知道如何正確地做到這一點。 我想分離每個單詞,爲它們分配一個ID並將結果保存爲JSON格式。解析文本文檔的最佳方式

示例文本:

"Hello, how are you (today)" 

這是林目前做:

$document_array = explode(' ', $document_text); 
json_encode($document_array); 

產生的JSON是

[["Hello,"],["how"],["are"],["you"],["(today)"]] 

如何確保空間保持在並且這些符號不包括在內...

[["Hello"],[", "],["how"],[" "],["are"],[" "],["you"],[" ("],["today"],[")"]] 

我敢肯定某種正則表達式是必需的......但不知道應用什麼樣的模式來處理所有情況......任何建議傢伙?

回答

2

也許這個:?

array_filter(preg_split('/\b/', $document_text)) 

的「array_filter」,所得到的陣列的第一和/或最後一個索引,如果字符串開頭或字邊界(\ B請參閱:http://php.net/manual/en/regexp.reference.escape.php)結束,其將出現在移除空值

4

這實際上是一個非常複雜的問題,需要進行大量的學術研究。這聽起來很簡單(只需將空白分開!也許有一些標點符號的規則......),但你很快就會遇到問題。 「沒有」一個字或兩個?連字符怎麼辦?有些可能是一個詞,有些可能是兩個。關於多個連續的標點符號呢?擁有者與報價?等等。即使確定句子的結尾也不是微不足道的。 (這只是一個完整的權利?!)

這個問題是tokenisation和搜索引擎非常重視的話題之一。說實話,你應該看看用你選擇的語言找到一個符號。

+0

是的,第三方解決方案可能是最好的選擇......我相信他們已經制定了相當複雜的規則來處理這些問題。有什麼建議麼? – 2011-04-13 14:14:28

+1

在php沒有。在java中有一個數字:打開NLP,斯坦福大學NLP,Lucene的記號器和Python中的NLTK。 – 2011-04-13 14:27:39

+0

Python是另一種基於web的語言...以前沒有使用它,但我想我可以在python中實現解析器,然後將JSON發送回PHP ...不知何故 – 2011-04-13 15:37:45

相關問題