所以我有一些中等长度的字符串-介于几个单词和几个句子之间。有时,文本中的子字符串在一行中重复两次。我需要编写自动代码来识别重复的部分。或者至少用高概率标记它。
我知道的:
- 重复子字符串是由几个完整的单词(和标点符号)组成的一系列。重复不会出现在单词中间。
- 重复长度可变。它可以是几个单词到几个句子。但它总是至少几个字长。如果可能,我希望避免标记重复的单个单词。
- 当重复发生时,它总是恰好重复一次,就在前一次出现之后。就在上次出现之后。(& lt; -)
- 我需要在大约一百万个不同的字符串上运行这个检查,所以代码至少要有一定的效率(不是蛮力检查每个选项的方法)。
我已经为此挣扎了一段时间了。非常感谢您的帮助。
由于重复的一个单词是子类对于多单词重复,匹配单个单词或类似单词的序列已经很有帮助了。以下是正则表达式,我在一个带有正则表达式搜索的编辑器中尝试过你的问题:
(<w.{3,16}w>).{2,}1
这是第一次发现的重复
重复的长度是可变的。它可以是几个单词到几个句子本身。但至少要有几个字长。如果可能的话,我希望避免标记重复的单个单词。
然后在repeating
中找到repeat
。所以我们必须调整极限。
部分(<w.{3,16}w>)
表示
- from word start(包括字符)
- 3到16个任意字符
- 字尾前(包括字符)
换句话说,一个或多个字符总数为5到18的单词。
部分.{2,}1
表示
- 至少两个字符
- 无上限
- 捕获匹配
此处,下限可以更高。应该尝试一个上限,特别是对于较长的文本。
我认为从寻找重复的短字符序列开始,然后通过寻找在第一步的结果中重复的较长的序列来改进(加上末尾的附加字符)。
这也是预处理的问题。我猜如果在不同的地方出现换行(而不是空格),重复的多字序列应该被忽略。
要进一步自动化此操作,您可以切换到Python的re
模块。