0

私のプロジェクトでは、さまざまな文を分析し、疑問符で終わっているかどうかを判断して、どの文が疑問文であるかを判断する必要がありました。

だから私は爆発を使ってみましたが、複数の区切り文字をサポートしていませんでした。すべての句読点を一時的に chr(1) に置き換えて、すべての文が末尾に関係なく分解できるようにしました (.、!、? など...)。

次に、各文の最後の文字を見つける必要がありましたが、爆発関数によってすべての句読点が削除されたため、そこに戻す何らかの方法が必要でした.

問題を解決するのに長い時間がかかりましたが、最終的には解決しました。他の人が使用できるように、ここに私のソリューションを投稿しています。

4

2 に答える 2

10
$array = preg_split('~([.!?:;])~u',$raw , null, PREG_SPLIT_DELIM_CAPTURE);
于 2013-05-25T11:46:12.877 に答える
8

これが私の関数、multipleExplodeKeepDelimiters です。また、文字列をさまざまな文に分解し、最後の文字が疑問符であるかどうかを確認することによる、使用方法の例:

function multipleExplodeKeepDelimiters($delimiters, $string) {
    $initialArray = explode(chr(1), str_replace($delimiters, chr(1), $string));
    $finalArray = array();
    foreach($initialArray as $item) {
        if(strlen($item) > 0) array_push($finalArray, $item . $string[strpos($string, $item) + strlen($item)]);
    }
    return $finalArray;
}

$punctuation = array(".", ";", ":", "?", "!");
$string = "I am not a question. How was your day? Thank you, very nice. Why are you asking?";

$sentences = multipleExplodeKeepDelimiters($punctuation, $string);
foreach($sentences as $question) {
    if($question[strlen($question)-1] == "?") {
        print("'" . $question . "' is a question<br />");
    }
}
于 2013-05-25T11:41:08.973 に答える