【问题标题】:Split sentence into words将句子拆分成单词
【发布时间】:2016-05-19 00:36:16
【问题描述】:

例如我有这样的句子:

$text = "word, word w.d. word!..";

我需要这样的数组

Array
(
    [0] => word
    [1] => word
    [2] => w.d
    [3] => word".
)

我对正则表达式很陌生..

这是我尝试过的:

function divide_a_sentence_into_words($text){ 
    return preg_split('/(?<=[\s])(?<!f\s)\s+/ix', $text, -1, PREG_SPLIT_NO_EMPTY); 
}

这个

$text = "word word, w.d. word!..";
$split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY);
print_r($split);

有效,但我有第二个问题,我想用 mu 正则表达式编写列表 "w.d" 是特殊情况.. 例如这个词是我的列表 "w.d" , "mr.", "dr."

如果我会接受文字:

$text = "word, dr. word w.d. word!..";

我需要数组:

Array (
  [0] => word
  [1] => dr.
  [2] => word
  [3] => w.d
  [4] => word 
)

抱歉英语不好...

【问题讨论】:

  • 要求代码的问题必须表明对所解决问题的最低理解。包括尝试过的解决方案、它们为什么不起作用以及预期的结果。
  • 究竟什么是“词”?在英语中,您如何定义“单词”是什么?在编写正则表达式之前,您必须能够用英语描述您尝试实现的规则。
  • 向我们展示您到目前为止所做的尝试。 不要描述它,而是编辑问题并粘贴到实际代码中。然后告诉我们什么不起作用。当你尝试它时发生了什么?你得到不正确的结果吗?您得到 no 结果了吗?如果结果不正确,是什么导致它们不正确?你期待什么?你得到任何正确的结果了吗?如果是这样,它们是什么?不要让我们猜测。
  • 我尝试:function divide_a_sentence_into_words($text){ return preg_split('/(?

标签: php text-segmentation


【解决方案1】:

preg_split/[^\w]*([\s]+[^\w]*|$)/ 的正则表达式一起使用应该可以正常工作:

<?php
    $text = "word word w.d. word!..";
    $split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY);
    print_r($split);
?>

DEMO

输出:

Array
(
    [0] => word
    [1] => word
    [2] => w.d
    [3] => word
)

【讨论】:

  • 是的,这行得通,但我有第二个问题,我想用 mu 正则表达式写列表“w.d”是特殊情况。例如,这个词是我的列表“w.d”,“先生”, “博士。”如果我要接受文本: $text = "word, dr. word w.d. word!..";我需要数组:数组([0] => word [1] => dr. [2] => word [3] => w.d [3] => word)
【解决方案2】:

使用explode函数,将字符串拆分成一个数组

$words = explode(" ", $text);

【讨论】:

  • 他似乎想忽略词尾的句点/标点符号。
  • 我知道它没有足够的内容来重现,但问题也没有太多信息,所以它不是那么复杂
  • 这给了你最后一个词:[4] => word!.. 第二个词将是 [1] => word,
【解决方案3】:

使用

str_word_count ( string $string [, int $format = 0 [, string $charlist ]] )

见这里http://php.net/manual/en/function.str-word-count.php 它完全符合您的要求。所以在你的情况下:

$myarray = str_word_count ($text,1);

【讨论】:

  • 看文档,这个方法也返回数组中的每个单词
  • 如果 '.'包含在 $charlist 参数中,那么它将被视为单词的一部分;虽然 preg_split 表达式会更好,因为它可以区分字符之间的 . 和后跟空格的 .
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
相关资源
最近更新 更多