最受欢迎的子串

时间:2010-10-14 14:05:14

标签: algorithm language-agnostic text-parsing

我正在尝试将大量短字符串解析为某些逻辑部分。这似乎是一个有趣的问题,有人可能已经解决了,但我找不到任何论文/解决方案(或者我可能正在尝试错误的关键词)。

琴弦有2-5个部分。如果我用每个单词替换一个字母来说明它所属的“部分”/“部分”,这里将是它们的一个样本:

AAABB
AABBBBCC
AABBBBDD
AAACCDD
...

大多数“部分”只有2-3个字长,在~10k字符串中出现约100-500个完全相同的部分。这意味着,在100个字符串中有AAA ==“这里有一些文本”而在其他100中有AAA ==“其他一些文本”。在一个字符串中,每种类型只能有一个部分(它们通常按顺序排列)。任何部分都没有有限的值集,未来可能会出现新值。

问题是:如果我有足够的样本并且不想手动标记它们,我该如何检测这些部分?这可以是监督/确认,而不是全自动,因此概率列表是可以的。

我正在考虑简单地制作一个2-5长单词n-gram的列表并找到概率,但这并没有考虑到顺序(这可能会有所帮助)。它还会检测到某些文本是常见的,但如果我有一些特定的2个部分经常使用相同的值,则此方法将无法正常工作。假设我只有ABCD组成的字符串,每行都有相同的值:

ABC
ABD
ACD

只进行ngram分析,我很可能将A作为一个部分,以及AB,C和D.我想在这种情况下从结果中消除AB,但是在某种程度上不能t将自己的部分分配给像“the”这样的单词,并删除碰巧包含“the”的所有较大部分。

是否有针对类似问题的已知解决方案?

1 个答案:

答案 0 :(得分:1)

Lempel-Ziv-Welch算法在识别公共子串方面非常有效,但它并不试图对它们进行排名。它也没有注意字或线的界限。它仍然可以用它作为起点来获得你需要的东西。