2011-03-31 36 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); 

?>