我正在尝试将大量短字符串解析为一些逻辑部分。似乎有人已经解决了一个有趣的问题,但我找不到任何论文/解决方案(或者我可能尝试了错误的关键字)。
琴弦有 2-5 个部分。如果我用每个单词替换一个字母,说明它属于哪个“部分”/“部分”,这里将是它们的一个示例:
AAABB
AABBBBCC
AABBBBDD
AAACCDD
...
大多数“部分”只有 2-3 个单词长,并且在约 10k 个字符串中出现约 100-500 次完全相同的部分。这意味着,在 100 个字符串中有 AAA == "some text here",在其他 100 个字符串中有 AAA == "some other text"。在一个字符串中,每种类型只能有一个部分(它们通常按顺序排列)。任何部分都没有一组有限的值,将来可能会出现新值。
问题是:如果我有足够的样本并且不想手动标记它们,如何检测这些部分?这可以被监督/确认,不是全自动的,所以一个概率列表是可以的。
我正在考虑简单地制作一个 2-5 个长单词 n-gram 的列表并找到概率,但这并没有考虑到顺序(这可能会有所帮助)。它还会检测到某些文本是常见的,但如果我有一些特定的 2 部分经常使用相同的值,则此方法将无法正常工作。假设我只有由 ABCD 组成的字符串,每行都具有相同的值:
ABC
ABD
ACD
只做 ngram 分析,我很可能 A 是一个部分,以及 AB、C 和 D。在这种情况下,我想从结果中消除 AB,但以一种不分配自己的方式节到像“the”这样的词,并删除所有碰巧包含“the”的较大部分。
有没有针对类似问题的已知解决方案?