反调是一个恰当的句子,当反调书写时,它构成了一个(可能不同(恰当的句子,直到可能改变间距。我有一个文件,里面有1亿个正确的句子,我想通过测试忽略内部空间时它们的倒数是否也在文件中,找到所有子句子(按单词边界划分(。我最初的方法是提取所有的子句子并将其保存到一个临时文件中,在内存中创建一个空间剥离反转的集合,最后在临时文件上迭代,测试空间剥离后的每一行是否属于该集合。这对于较小的文件来说效果很好,但无法缩放,因为集合对于内存来说太大了。除了用磁盘上的数据库替换内存中的集合之外,还能做些什么呢?
编辑:我最终使用了一个带索引的sqlite数据库。在一个500万句的小集合中,使用数据库而不是内存集需要2倍的时间。对于全套,这是我发现的唯一可以完成计算的方法。
对于每个合适的句子,你可以尝试将其倒置,并找到所有合适的可能子句。
然后,对于每个倒置的子内容,去掉所有空格。
然后在原始文件中执行regex搜索,使用空格分隔的倒置子内容进行搜索,允许在字符之间使用s?
。
例如,ds?ls?rs?os?ws?os?ls?ls?es?h
(倒置的"你好世界"(将匹配"wlro woll eh"(带有疯狂间距的倒置的"hello世界",如果它是一个合适的句子,则会在原始文件中(