【发布时间】:2021-07-13 21:40:13
【问题描述】:
不幸的是,我有一些转录本包含大量以句点分隔但没有空格的单词(即 word.word)。
有没有办法使用正则表达式来分隔它们,但只保留其他单词,如小数和缩写,如 U.K. 或 U.S.A?我打算对文本进行标记,因此我希望 word.word 的出现被计为单独的单词,但我不想弄乱缩写/小数/句点是单词一部分的任何其他地方。因为我想用空格替换这些特定的 word.word 句点,但不理会所有其他句点(或者至少不要用空格替换它们,因为那样会破坏缩写),我的第一个想法是这样的:
text = re.sub("(?<!\d){2,}\.(?!\d){2,}", " ", text)
查找由至少两个或多个非数字包围的句点,然后将句点替换为空格。但似乎可变长度的后视/前瞻并不是你能做的事情。我已经在一些正则表达式测试器中对此进行了测试,它仍然与上面的字母缩写匹配,尽管它不匹配小数。
是否有另一种方法来写下我的想法或另一种方法来解决这个问题?我已经在这个解决方案中陷入了某种困境,我找不到另一种方法可以接近我想要做的事情 - 甚至可以完成吗?
谢谢!
【问题讨论】:
-
假设您只想按句点分割长度>1 个单词?例如
"i.would.like.to.visit.the.U.S.A"将是["i", "would", "like", "to", "visit", "the", "U.S.A"]。对? “a”这个词呢? [一个名词]。所以你只想把大写的缩写放在一起? [美国,但不是美国] -
大小写无关紧要 - U.S.A 应该放在一起,但 p.m.如果曾经这样写,也应该保留。两边分裂的长度> 1是我想要完成的。值得庆幸的是,我们似乎没有遇到过任何情况下它是一个单词,然后是一个缩写,更多的是可能发生了一些事情,句子边界被弄乱了。
-
我有使用正则表达式吗?
-
如果有其他方法可以解决这个问题,请告诉我 - 它不必是正则表达式,这正是我开始的地方,因为它似乎是对大量应用更改的最简单方法成绩单。
标签: python-3.x regex regex-lookarounds