我有一个问题,我想用fullstop(.)将文本分成句子
例如:
憨豆先生是英国喜剧电视连续剧,由罗文阿特金森主演的14个半小时剧集作为主角.不同的剧集由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·埃尔顿撰写.
如果我分开上面的文字,我得到3个句子,
1.先生
2.比恩是英国喜剧电视连续剧14集半小时剧集,由罗文阿特金森主演的主角.不同的剧集由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·埃尔顿撰写.
3个不同的情节是由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·艾尔顿一个写的.
我想在第二句中包括先生,因为案文应分成两句而不是三句.
憨豆先生是英国喜剧电视连续剧,由罗文阿特金森主演的14集半小时剧集作为主角.不同的剧集由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·埃尔顿撰写.
2.不同的发作是由阿特金森,罗宾·德里斯科尔,理查德·柯蒂斯和本·艾尔顿一个写的.
请帮助我.我很欣赏社区的即时反馈.
谢谢.
如果您正在寻找一种避免在缩写(如a.m.)之后拆分句子的方法,那么这是一个困难的自然语言问题.
如果你只是想分开句子而不用担心先生或夫人(并且有一个不太可能出现在文本中的角色,*),这里有一个简单的方法:
Mr.,并Mrs.用Mr*和Mrs*.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作为哨兵.