根据点拆分句子,而不会被博士、先生等词所困


Split sentences based on dots without being trapped by words like Dr., Mr., etc

我想使用句号(如'.)将文本拆分为句子。但是,如果文本中存在诸如"博士","夫人","美国"等词,那么拆分器可能会混淆。例如,请考虑以下文本:

《憨豆先生》是一部英国喜剧电视连续剧。

这分为两句话:1:先生2:憨豆是一部英国喜剧电视连续剧。

有没有一种聪明的方法可以在不使用此类特殊单词的字典/数组的情况下在 PHP 中解决此问题?

顺便说一句,我使用以下代码来检查给定的单词是否有句号。这段代码工作正常,但我需要用很多这样的单词填充字典/数组。我正在寻找一种不需要任何字典的解决方案。现在,知道吗?

public function doesWordHasFullstop($word){
if(in_array(strtolower(trim($word)), array('dr.','mr.','mrs.','prof.','ms.','sr.','jr.','m.sc.'
                              ,'b.sc.','ph.d.','st.', 'gen.','sen.','rep.','jan.',
                              'feb.','mar.', 'apr.','jun.','jul.','aug.','sep.',
                              'oct.','nov.','dec.','drs.','m.d.','b.a.','m.a.','d.d.s.',
                              'u.s.a','u.a.e','u.k.','p.m.','a.m.'))){
    return FALSE;
}
preg_match('/[.,;):>']?!@#|]+/', $word, $matches);
if(count($matches)>0){
    return TRUE;
}else{
    return FALSE;
}

}

不是让你气馁,但这实际上是不可能的。 考虑以下句子:

格里芬一家住在斯普纳街,辛普森一家住在常青街。

除非你愿意依赖像大写这样更不可靠的标记,否则你必须承认,你唯一能分辨出第二个句点既是缩写的结尾又是句子的结尾的方法,而第一个句号只标记第一个句号是用全尺寸句法分析,这在自然语言中是不可能的。

(是的,我知道辛普森一家住在常青露台上,但我想说明这个问题。

好吧,你不能使用字典,而是使用数组。

function SplitAtSentance($Criteria,$Word){
    $Word = explode (" ",$Word);
    foreach ($Criteria AS $Keys => $Values){
        if (in_array($Values,$Word)){
            $New = implode(" ",$Word);
            return str_replace($Values, $Values."<br>",$New);
        }
    }
    return false;
}
$Array = array ("Mr","ms");
$Original = "Mr Daryl";
echo SplitAtSentance($Array,$Original);

这是我当前的设置:

$Contents = file_get_contents("../test.txt");
function SplitAtSentance($Criteria,$Word){
$Word = explode (" ",$Word);
foreach ($Criteria AS $Keys => $Values){
    if (in_array($Values,$Word)){
        $New = implode(" ",$Word);
        return str_replace($Values, $Values."<br>",$New);
    }
}
return false;
}
$Contents = explode(",",$Contents);
$Sentance = "Dear mr Gill";
echo SplitAtSentance($Contents,$Sentance);

和文件结构: HTDOCS/TextDoc(代码段所在的位置) HTDOCS(文本.txt所在的位置)

../将返回一个目录并加载包含以下内容的文本文档:

先生,先生,硕士,博士

,博士,博士