在文本中检测句子边界似乎很难.引号如.!?可能用于分隔句子但不准确,因为可能有歧义的词和引文,如美国或教授或博士我正在研究Tperl
regex库和正则表达食谱
Jan Goyvaerts但我不知道如何编写检测表达式句子?
在delphi中使用Tperlregex可能是比较准确的表达式?
谢谢
首先,您可能需要达到自己对“句子”的定义,然后实现该定义.例如,怎么样:
He said: "It's OK!"
是一两句话吗?一般答案是无关紧要的.决定是否要将其解释为一个或两个句子,并相应地进行.
其次,我不认为我会使用正则表达式.相反,我会扫描每个字符并尝试检测序列.一个句子本身可能不足以划分一个句子,但是一个句子后跟空格或回车(或字符串的结尾)可能就是这样.这会立即让你淘汰美国(没有空格的时期).
对于Prof. a Dr.这样的常见缩写,创建一个字典可能是一个好主意 – 也许可以由用户编辑,因为每种语言都有自己的一组常用缩写.
每种语言也都有自己的标点符号规则,这可能会影响标点符号的解释方式.例如,英语倾向于在括号内放置句号(如此),而波兰语则相反(如此).相同的区别将适用于双引号,单引号(某些语言根本不使用它们,有时它们与撇号等无法区分).您的规则可能必须特定于语言,至少部分是这样.
最后,你可能会用人类的方式来界定句子,但总会有一些案例可以抛出分析.例如,假设您有一个识别“Prof.”的字典.作为缩写,你打算做什么
Most people called him Professor Jones,but to me he was simply The Prof.
即使你有一个跟随并以大写字母开头的另一个句子,这仍然无法帮助你知道句子在哪里结束,因为它可能也是
Most people called him Professor Jones,but to me he was simply Prof. Bill.