计算像Microsoft Word这样的单词

时间:2010-01-27 09:54:51

标签: php javascript

我需要使用PHP或Javascript(最好是PHP)计算字符串中的单词。问题是计数需要与Microsoft Word中的计数相同,因为这是人们组装原始文本的地方,因此这是他们的参考框架。 PHP有一个单词计数功能(http://php.net/manual/en/function.str-word-count.php),但据我所知,这并不是100%相同。

任何指针?

5 个答案:

答案 0 :(得分:10)

这里的真正问题是,您在尝试开发解决方案时并未真正了解具体要求。这不是编码问题,而是规范问题。

问题的关键在于你的字计数算法与 Word的字计数算法不同 - 可能有充分的理由,因为有各种边缘情况考虑没有明显的答案。因此,您的问题应该是“Word使用什么算法来计算字数?”如果你想一点,你已经知道了答案 - 它是封闭源代码的专有软件,所以没有人能确切知道。即使您解决了问题,这也不是公共接口,因此可以在下一版本中轻松更改。

基本上,我认为设计软件基本上是一个坏主意,因此它的功能与您无法完全理解的功能完全相同。就个人而言,我会专注于开发一个你自己的理智字数,记录其背后的算法,并证明为什么它是一个合理的计算单词的方法(指出这一点)没有一种真正的方式。)

如果必须符合Word针对某些短视业务原因的尝试,那么最重要的任务就是找出他们使用的方法,以便在纸上写下算法。但这并不容易,将很难完全验证并且可能会在没有通知的情况下发生变化......: - /

答案 1 :(得分:2)

由于依赖字数的专业人士 - 记者,翻译人员以及经常参与法律程序的律师,其中动词和子项目必须少于具体数字。

说完这篇文章 - http://dotnetperls.com/word-count

描述了一个在C#中实现的非常好的正则表达式算法 - 但应该很容易转换为php。

我认为他的小错误是基于两个因素 - MS Word错过了“常规段落”中没有包含的词语,因此脚注,文本框和表格包含的单词可能会或可能不会被计算在内。此外,我认为EVIL智能报价功能混乱可能会影响结果。所以将所有'el-dash'和'em-dash'字符改回正常减号可能是值得的。

答案 2 :(得分:0)

以下JS代码的字数为67.OpenOffice给出相同的数字。

str = "I need to count words in a string using PHP or Javascript (preferably PHP). The problem is that the counting needs to be the same as it works in Microsoft Word, because that is where the people assemble their original texts in so that is their reference frame. PHP has a word counting function (http://php.net/manual/en/function.str-word-count.php) but that is not 100% the same as far as I know.";

wordCount = str.split(/\s+/g).length;

答案 3 :(得分:-1)

function countWords( $text )
{
    $text = preg_replace('![^ \pL\pN\s]+!u', '', strtolower($text));
    $text = trim( preg_replace('![ \s]+!u', ' ', $text) );

    $count = count( explode(' ', $text) );

    return $count;
}

答案 4 :(得分:-1)

您可以将此代码用于字数

<title>Untitled Document</title>
<script type="text/javascript" src="mootools.svn.js"></script>
<script type="text/javascript">
    window.addEvent('domready', function()
    {   
        $('myInput').addEvent('keyup', function() 
        {
            max_chars = 0;
            current_value   = $('myInput').value;
            current_length  = current_value.length;
            remaining_chars = max_chars+current_length;
            $('counter_number').innerHTML = remaining_chars;
            if(remaining_chars<=5)
            {
                $('counter_number').setStyle('color', '#990000');
            } else {
                $('counter_number').setStyle('color', '#666666');       
            }   
        }); 
    }); 
</script>

<style type="text/css"> 
    body{
        font-family:"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif; 
        font-size:12px;
        color:#000000; 
    }
    a:link, a:visited{color:#0066CC;}
    label{display:block;}
    .counter{
        font-family:Georgia, "Times New Roman", Times, serif;
        font-size:16px; 
        font-weight:bold;
        color:#666666
    } 
</style> 
</head>
<body> 
    <label for="myInput">Write something here:</label> 
    <input type="text" id="myInput" maxlength="20" />  
    <span id="counter_number" class="counter">20</span> 
    Remaining chars

并下载mootools库......