Microsoft Word yapar gibi kelimeleri saymak

4 Cevap php

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.

Herhangi bir işaretçiler?

4 Cevap

Burada asıl sorun gerçekten kesin gereksinimlerini anlamadan bir çözüm geliştirmek için çalışıyoruz olmasıdır. Bu özellikleri ile bir sorun olarak çok fazla bir kodlama sorun değildir.

Potansiyel olarak iyi bir nedenle, hiçbir belirgin ile dikkate çeşitli kenar durumlar vardır beri - sorunun dönüm noktası your kelime sayma algoritması Word's kelime sayma algoritması farklı olduğunu cevaplar. Böylece soru gerçekten "Kelime kelime sayısı hesaplamak için kullanır Ne algoritması olmalı?" Ve sen biraz bu konuda düşünüyorsanız, zaten cevabı biliyorum - bu oluyor kapalı kaynak, özel yazılım yüzden kimse emin olabilirim. Kolayca bir sonraki sürümünde değişmiş böylece ve do bunu atlatmanın bile, bu bir kamu arayüzü değildir.

Temelde, ben bu temelde onu tam anlayamıyorum şey aynı fonksiyonları böylece yazılım tasarımı kötü bir fikir olduğunu düşünüyorum. Şahsen, ben sadece kendi aklı başında bir kelime sayımı, documenting the algorithm behind it gelişmekte ve hiçbir One True Way olduğuna işaret kelimeleri sayma bir reasonable yöntemi (neden haklı konsantre olur .)

Eğer must, bazı kısa görüşlü iş nedenle Word'ün girişimi için uygun olursa, o zaman bir numaralı görevi onlar kağıt üzerinde bir algoritma yazabilirsiniz noktaya kullanmak ne metodoloji çalışmaktır. Ama bu kolay olmayacak, tamamen doğrulamak için çok zor olabilir ve önceden bildirilmeksizin değişebileceğini olacak ... :-/

Aşağıdaki JS kod 67 sözcük sayısını verir. OpenOffice aynı numarayı verir.

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;

Bir mayın alanının bit MS kelime sayar kelime sayım bağlıdır Uzmanları tarafından yanlış ve güvenilmez olarak kabul edilir gibi - gazeteciler, çevirmenler ve genellikle hareketleri ve submisions fo belirli bir sayıdan daha az olmalıdır yasal prosedürlerine katılan Lawers kelime.

Having said that this article- http://dotnetperls.com/word-count

C # uygulanan oldukça iyi bir regex algoritmayı tanımlar - ama php içine transalate için faily kolay olmalıdır.

MS Word dipnotları, metin kutusu ve masa sarılmış kelime ya sayılır olmayabilir yani "normal paragraflarda" conatined değil kelimeleri özlüyor - Ben onun küçük yanlışlıklar iki faktöre dayalı olduğunu düşünüyorum. Ayrıca ben EVIL akıllı tırnaklar hypens ile karıştırmasını sonuçlarını etkileyebilir özelliği düşünüyorum. Yani tüm 'el-çizgi' ve geri normale eksi işareti için 'em-dash' karakteri değişiyor değer olabilir.

Eğer kelime sayımı için bu kodu kullanabilirsiniz

<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

ve Mootools kütüphane indirmek ...