用PHP/Python解析文本?怎么做?使用什么?

1 投票
4 回答
557 浏览
提问于 2025-04-16 14:50

我正在搭建一个Drupal网站,专门为学习外语的人提供服务,里面有词汇共享和抽认卡的功能。我在考虑增加一个功能,可以解析文本(比如报纸文章),然后输出一个使用过的单词列表,接着可能再和词汇部分连接起来。

目前,我想知道有没有什么程序或者脚本,最好是用php写的,或者可能用python,也可以用来解析文本,生成一个单词列表(还可以排除一些常用词)。我希望这个功能能适应Drupal,所以用php会更好。我对市面上各种工具都持开放态度,有什么好的建议吗?

我其实不知道从哪里开始做这个功能?

4 个回答

1

你可以利用PHP自带的文件功能来读取文件。想了解更多,可以看看这个链接:http://www.w3schools.com/PHP/php_file.asp

1

如果你想排除一些非常常见的词,可以使用一个叫做停用词的词表,比如:

你可以把这些停用词加载进来,然后把你的词汇和停用词进行比较:

<?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);

?>
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);
?>

更新:现在去掉了换行符。所有的修改都分成了单独的命令。

撰写回答