【问题标题】:Count digits as separate words using str_word_count in PHP在 PHP 中使用 str_word_count 将数字计数为单独的单词
【发布时间】:2019-10-05 07:21:51
【问题描述】:

我正在尝试使用str_word_count 来计算消息中的字数。

$wordcount = str_word_count($message,0,'0123456789');

我几乎可以保证里面只有单词、数字和空格。该消息是语音编码到文本消息的结果。

我正在努力解决的一件事是让它正确返回正确数量的单词。我需要将每个数字都算作它自己的单词。因此“4 5 6”是 3 个单词,“456”也是 3 个单词。 “FOUR”是一个词,“FOUR 44”是3个词,以此类推

这个函数的documentation 说我应该能够通过指定字符作为第三个参数算作单词来做到这一点,我已经这样做了。但是,整个数字“块”仍被计为一个单词。我尝试在数字之间添加空格,但这在视觉上触发了 Notepad++ 中的语法错误并且基本上炸毁了我的整个 PHP 页面。

我考虑过过滤字符串中的数字,然后将其长度添加到字数中,但是我肯定会重复计算一些数字……这很麻烦!

有没有任何方法我可以用str_word_count 本地做到这一点?

【问题讨论】:

  • 有没有可能得到一个看起来像1two3的词?
  • @Nick 就我而言,没有。我不知道那时我想要发生什么,因为那不在标准中。输入是语音到文本转换的结果,所以无论如何要得到“1two3”几乎是不可能的!

标签: php string word-count


【解决方案1】:

解决此问题的一种方法是首先使用preg_replace 将您的数字字符串拆分为单独的数字,然后计算单词。例如:

$message = "I have 123 chickens";
$message = preg_replace('/\s*(\d)/', ' $1', $message);
$wordcount = str_word_count($message, 0, '0123456789');
echo $wordcount;

输出

6

Demo on 3v4l.org

【讨论】:

  • 如果字符串是“我有 1two3 只鸡”,则该解决方案输出 5,而它应该输出 6。
  • @parsonsbots 在 OP 问题中没有迹象表明 1two3 是一个有效的单词(他们提到单词、数字和空格,通常单词表示字母序列,而不是像 1two3 之类的东西)。根据问题中未提及的可能情况投反对票似乎有点苛刻。
  • "该消息是语音编码到文本消息的结果。" - 在粗略的语音到文本编码中,1zero1 可能是 101 的可能输出,但我将删除反对票(一旦删除了每小时限制)。
  • @parsonsbots 我使用的 STT 并没有做到这一点。在进入主服务器之前,我也进行了预处理。
【解决方案2】:
$message = 'Hello 012THREE4five6';
echo str_word_count(preg_replace('/[0-9]/', ' zzz ', $message));

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 2013-01-20
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2020-12-27
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多