0

我在 php 中有一个长字符串,由不同的段落组成,每个段落都有不同的句子(它几乎是一个小文档)。我想通过删除任何不相关的符号/字符将整个内容拆分为单词。例如,删除逗号、空格、换行符、句号、感叹号和任何可能不相关的内容,以便仅以单词结尾。

有没有一种简单的方法可以一次性做到这一点,例如使用正则表达式和preg_split函数,还是我必须多次使用explode函数:例如首先获取所有句子(通过删除'.','! ' ETC)。然后通过删除','和空格等来获取单词。

我不想explode对所有不相关的可能字符使用该函数,因为它很耗时,而且我可能会不小心忽略了所有这些可能的字符。

我想找到一种更自动的方法。我认为一个定义良好的正则表达式可能会完成这项工作,但我需要再次指定所有可能的字符,而且我不知道如何在 php 中编写正则表达式。

那么你有什么建议给我呢?

4

4 回答 4

3

你想删除标点符号等,然后将单词拆分成一个数组吗?或者只是去掉它,所以只有字母和空格?不完全确定您要达到的目标,但以下内容可能会有所帮助:

<?php

$string = "This is a sentence! It has *lots* of #$@king random non-word characters. Wouldn't you like to strip them?";

$words = preg_replace("/[^\w\ _]+/", '', $string); // strip all punctuation characters, news lines, etc.
$words = preg_split("/\s+/", $words); // split by left over spaces

var_dump($words);

无论哪种方式,它都为您提供了使用正则表达式根据需要操作文本的总体思路。我的示例有两个部分,这样“不会”之类的词就不会像其他答案所建议的那样分成两个词。

于 2012-01-31T23:30:02.270 回答
1

要兼容 unicode,您应该使用这个:

preg_split('/\PL+/u', $string, -1, PREG_SPLIT_NO_EMPTY);

在非字母字符上分裂。

看看这里以查看unicode 字符属性。

于 2012-02-02T09:47:20.737 回答
0

Your answer is in the domain of regular expressions and would probably be very difficult to get right. You could get something that works well in almost all cases but there would be exceptions.

This might help:

http://www.regular-expressions.info/wordboundaries.html

于 2012-01-31T23:26:46.030 回答
0

只需使用 preg_replace() 并定义一个正则表达式来匹配您希望替换的不同字符,并提供一个替换字符来替换它们。

http://php.net/manual/en/function.preg-replace.php

对于您希望搜索的字符,您可以在 PHP 数组中定义这些字符,如 PHP 手册中所示。

于 2012-01-31T23:25:25.923 回答