一尘不染

将文本分割成单个单词

php

我想使用PHP将文本拆分成单个单词。你有什么想法要实现吗?

我的方法:

function tokenizer($text) {
    $text = trim(strtolower($text));
    $punctuation = '/[^a-z0-9äöüß-]/';
    $result = preg_split($punctuation, $text, -1, PREG_SPLIT_NO_EMPTY);
    for ($i = 0; $i < count($result); $i++) {
        $result[$i] = trim($result[$i]);
    }
    return $result; // contains the single words
}
$text = 'This is an example text, it contains commas and full-stops. Exclamation marks, too! Question marks? All punctuation marks you know.';
print_r(tokenizer($text));

这是一个好方法吗?您有改进的想法吗?

提前致谢!


阅读 530

收藏
2020-05-29

共1个答案

一尘不染

使用与任何Unicode标点符号匹配的\ p {P}类和\ s空格类。

$result = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', $text, -1, PREG_SPLIT_NO_EMPTY);

这将拆分为一组一个或多个空格字符,但也会吸收周围的所有标点符号。它还在字符串的开头或结尾匹配标点符号。这区分了诸如“不要”和“他说’哎呀!’”之类的情况。

2020-05-29