将文本分成句子甚至是Mrs. Mrs.存在于文本中

Rai*_*ain 3 c# split

我有一个问题,我想用fullstop(.)将文本分成句子

例如:

憨豆先生是英国喜剧电视连续剧,由罗文阿特金森主演的14个半小时剧集作为主角.不同的剧集由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·埃尔顿撰写.

如果我分开上面的文字,我得到3个句子,

1.先生

2.比恩是英国喜剧电视连续剧14集半小时剧集,由罗文阿特金森主演的主角.不同的剧集由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·埃尔顿撰写.

3个不同的情节是由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·艾尔顿一个写的.


我想在第二句中包括先生,因为案文应分成两句而不是三句.

憨豆先生是英国喜剧电视连续剧,由罗文阿特金森主演的14集半小时剧集作为主角.不同的剧集由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·埃尔顿撰写.

2.不同的发作是由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·艾尔顿一个写的.

请帮助我.我很欣赏社区的即时反馈.

谢谢.

Gab*_*abe 6

如果您正在寻找一种避免在缩写(如a.m.)之后拆分句子的方法,那么这是一个困难的自然语言问题.

如果你只是想分开句子而不用担心先生或夫人(并且有一个不太可能出现在文本中的角色,*),这里有一个简单的方法:

  1. 替换的所有实例Mr.,并Mrs.Mr*Mrs*
  2. 拆分文本 .
  3. 所得到的阵列中,替换的所有实例Mr*Mrs*Mr.Mrs.

这是一个使用NUL作为哨兵角色的版本,因为它几乎不可能无意中显示在文本中:

static IEnumerable<string> Splitter(string sentences)
{
    char sentinel = '\0';
    return sentences.Replace("Mr.", "Mr" + sentinel)
        .Replace("Mrs.", "Mrs" + sentinel)
        .Split(new[] { ". " }, StringSplitOptions.None)
        .Select(s => s.Replace("Mr" + sentinel, "Mr.")
                        .Replace("Mrs" + sentinel, "Mrs."));
}
Run Code Online (Sandbox Code Playgroud)

如果你是那种认为任何特定角色有可能出现在你的文本中的偏执者,请随意使用GUID作为哨兵.