2011-03-31 25 views
1

我有一個爲外語學習者設計的Drupal Ed網站,我建立了一個詞彙共享功能和flashcard功能。我正在考慮添加一種方法來解析文本(報紙文章等)並輸出使用的單詞列表,然後也許交叉連接到詞彙部分。用PHP/Python解析文本?怎麼樣?什麼?

現在,我想知道是否有任何程序/腳本在理想的php或可能的python,可能被用來解析文本到一個單詞列表(可能能夠排除一個最常見的列表話)。我希望能夠適應在Drupal中工作,所以PHP將是最好的。我願意使用那裏的各種東西?有任何想法嗎?

我真的不知道該從哪裏開始呢?

+2

什麼是特定問題?請不要告訴我們您需要知道如何使用簡單的拆分操作來讀取文件並將文本分割爲字符串。否則,這個問題值得質量差。 – 2011-03-31 18:02:19

+0

也許你應該安裝一個搜索引擎,例如[ElasticSearch](http://www.elasticsearch.org/)。除非你真的*想要*重塑它? – bart 2011-04-01 12:33:32

+0

感謝您的想法。我會從這些工作。我想知道從長遠來看,由於性能問題和更復雜的解析/突出顯示,我需要使用基於Java或Python的某種後端系統,比如Apache Solr。 – markwk 2011-04-01 15:37:49

回答

2

簡單化的開始:

<?php 
    // source text 
    $paragraph = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     Proin congue, quam nec tincidunt congue, massa ipsum sodales tellus, 
     in rhoncus sem quam quis ante. Nam condimentum pellentesque libero at 
     blandit. Suspendisse felis sem, interdum pulvinar ultricies a, auctor 
     vel leo. Curabitur congue mi nec purus placerat sit amet mollis magna 
     laoreet. Duis eu purus non turpis lacinia sagittis. Aliquam tristique 
     nulla volutpat neque posuere faucibus. Aenean tempus diam quis sem 
     convallis id cursus lorem sagittis. Nam feugiat, felis nec tincidunt 
     aliquet, felis lectus bibendum mi, ut tincidunt purus urna ac felis. 
     Quisque ut lectus dolor. Duis ipsum arcu, adipiscing id vestibulum 
     fringilla, euismod non augue. Nullam quis ipsum nec tortor tristique 
     egestas sed nec leo. Pellentesque tempus velit lacus, sit amet rhoncus 
     mi. Curabitur justo ipsum, consectetur ac vestibulum sed, porttitor 
     eget dui. Vivamus nisi lorem, porta vel gravida quis, varius et elit. 
     Nulla eros metus, congue sit amet interdum at, porta eget ligula."; 

    // remove newlines 
    $paragraph = str_replace(array("\r","\n"), '', $paragraph); 

    // convert to lowercase 
    $paragraph = strtolower($paragraph); 

    // remove non-alphanumeric characters 
    $paragraph = preg_replace('/[^A-Za-z0-9\s]/', '', $paragraph); 

    // convert into array 
    $words = explode(' ', $paragraph); 

    // remove null values 
    $words = array_filter($words, 'strlen'); 

    // remove duplicate values 
    $words = array_unique($words); 

    // sort array alphabetically (optional) 
    natsort($words); 

    // reindex array 
    $words = array_values($words); 

    // display array 
    print_r($words); 
?> 

更新:現在刪除換行。將所有修改分離爲單個命令。

0

如果你的文章的文本字符串,

# Get the set of words used in the text: 
words = set(word.lower() for word in text.split() if word.isalpha()) 
# Get word counts 
frequencies = {word: text.count(word) for word in words} 

可以刪除從設置很容易地最常見的詞與。對於strip標點符號而不是僅僅使用isalpha()可能是值得的。

1

要排除很常見的話,你可以使用stop words一個列表,例如:

你可以加載它們和交叉你的詞彙組帶相應的一組停用詞:

<?php 

// read in stop words 
$stopwords = file('ftp://ftp.cs.cornell.edu/pub/smart/english.stop', FILE_IGNORE_NEW_LINES); 

// read in the words from your text 
$words_from_text = array("notfrequent", "notfrequenttoo", "a", "is", "the", "superspecialword"); 

// remove the stop words 
$final_words = array_diff($words_from_text, $stopwords); 

// and have a look 
var_dump($final_words); 

?>