2011-10-25 35 views
1

我在頁面上有一個UTF8編碼的textarea。如何計算句子<textarea>?

如何計算所有句子與PHP?

更新: 句子以大寫字母開始,以點,問題或感嘆號結尾。

+9

你如何定義一個句子? – Nobody

+0

Well'count(explote('。',rtrim($ str,'。')))'似乎是一個好起點... – DaveRandom

+0

請檢查更新。 @Nobody –

回答

1

如果您將句子看作一個帶點的單詞,最後您可以在文本中計算點。

如果您使用新行,請計數\n's。

3

由於沒有人說過,這取決於你如何定義一個句子。這是一個嗎?這是一個換行嗎?它是一個首都嗎? 我認爲定義「一個句子」確實很難,因爲對於每個定義,您可以考慮100條該規則的例外情況。

無論如何,如果你想出一個定義,你可以計算出你的textarea中的出現次數。如換行次數,點數或大寫字母的數量。或者將所有這些組合成一個定義。所以基本上,只需把你的textarea的內容和處理它的一些功能。 :-)

這是最好的,可以回答這個問題伊莫。

編輯您的編輯後,我的回答是:

function starts_with_upper($str) {  
    $chr = mb_substr ($str, 0, 1, "UTF-8");  
    return mb_strtolower($chr, "UTF-8") != $chr; 
} 

//Get sentences splitted by a dot and starting with a capital letter. 
$total = 0; 
$sentences = explode('.', rtrim($text, '.')); 
for ($i = 0; $i < count($sentences); $i++) { 
    $sentence = $sentences[i]; 
    if (starts_with_upper($sentence)) { 
     $total++; 
    } 
} 

echo "You have " . $total . " sentences ending in a dot. 
3

從PHP的角度來看,一個<textarea>只是另一種<input>,所以這將是可通過$_GET$_POST正常提交表單時。

句子本身的計算相當複雜 - 您可以通過文本中的句數(.)來計算句子的數量,但這會因縮寫而失敗。 e.g.。你可以通過計算一個空格和一個大寫字母后的句點數來實現,但是對於普通名詞後面的縮寫,以及對於在句子開頭不使用大寫字母的人來說,這會失敗。你可以決定一個平均句子長度(比如70個字符)和大約sentences = characters/70。這些解決方案都不是完美的(在我看來,甚至是不錯的)。

UPDATE:按照你更新的問題,下面應該是有幫助的:

<?php 
preg_match_all("/(^|[.!?])\s*[A-Z]/",$_POST['textarea'],$matches); 
$count = count($matches); 
+0

(注意,這隻適用於A-Z首都,並且不包括諸如Ä這樣的字符,我認爲。) – Benjie