在破译句子分词器正则表达式时遇到问题
Having trouble deciphering a sentence tokenizer regex
以下正则表达式假设用作句子分词器模式,但我在破译它到底在做什么时遇到了一些麻烦:
(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<![A-Z]\.)(?<=\.|\?|\!)\s
我知道它使用了正面和负面的回顾,正如 this post 的公认答案所解释的那样(他们给出了这样的负面回顾的例子:(?<!B)A
)。但是在上面的正则表达式中 A
被认为是什么?
正则表达式正在检查句子之间的中断。负向回溯防止代表缩写而不是句子结尾的错误匹配。他们的意思是:
(?<!\w\.\w.)
不要匹配任何看起来像 A.b.、2.c. 或 1.3 的内容。 (可能他们的意思是第二个句点也是 \.
以仅匹配一个句点,但正如所写的那样,它将匹配末尾的任何字符,例如 A.b! 或 g.Z4)
(?<![A-Z][a-z]\.)
不要匹配任何看起来像 Cf.、Dr.、Mr. 等的内容。请注意,这只会检查两个字符,因此“Mrs.”会被错误匹配。
(?<![A-Z]\.)
不匹配任何看起来像 A. 或 C. 的东西
然后如果这些都通过了,它有一个正向后视 (?<=\.|\?|\!)
来检查 .
、?
或 !
。
最后它匹配任何空格 \s
。
以下正则表达式假设用作句子分词器模式,但我在破译它到底在做什么时遇到了一些麻烦:
(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<![A-Z]\.)(?<=\.|\?|\!)\s
我知道它使用了正面和负面的回顾,正如 this post 的公认答案所解释的那样(他们给出了这样的负面回顾的例子:(?<!B)A
)。但是在上面的正则表达式中 A
被认为是什么?
正则表达式正在检查句子之间的中断。负向回溯防止代表缩写而不是句子结尾的错误匹配。他们的意思是:
(?<!\w\.\w.)
不要匹配任何看起来像 A.b.、2.c. 或 1.3 的内容。 (可能他们的意思是第二个句点也是\.
以仅匹配一个句点,但正如所写的那样,它将匹配末尾的任何字符,例如 A.b! 或 g.Z4)(?<![A-Z][a-z]\.)
不要匹配任何看起来像 Cf.、Dr.、Mr. 等的内容。请注意,这只会检查两个字符,因此“Mrs.”会被错误匹配。(?<![A-Z]\.)
不匹配任何看起来像 A. 或 C. 的东西
然后如果这些都通过了,它有一个正向后视 (?<=\.|\?|\!)
来检查 .
、?
或 !
。
最后它匹配任何空格 \s
。