使用额外测试检查数组中的重复项

时间:2011-04-25 01:36:41

标签: javascript regex

嗨我有大量的单词,我想检查重复项,并检查复数和其他单词结尾,并开始这将使它成为相同的单词。

所以我可以拥有单词,但也可以(单独列出)具有基本后缀或前缀的单词。或者将带有前缀后缀的单词分成两部分。

所以如果我有阵列......

[repaint, painting, paints, painter, house, car, boat]

它将返回......

[re paint, paint ing, paint s, paint er, house, car, boat]

1 个答案:

答案 0 :(得分:0)

你想要的基础是一个词干算法。最常见的一个叫做Porter2,我有几个月前写的JS实现:

https://github.com/cwolves/stem

它并不能完全满足您的需求,特别是运行我得到的确切词语:

> token('repaint painting paints painter house car  boat');
[ 'repaint', 'paint', 'paint', 'painter', 'hous', 'car', 'boat' ]

你会注意到前缀没有被剥离,也没有“保存”后缀('ing','s'等)。

但是,只有少数英文前缀可以预先剥离:'re','un','under','vice'等。完整列表:

http://en.wikipedia.org/wiki/English_prefixes

在大多数情况下,后缀可以通过取词干和最后一个词之间的差异来推断。例如“绘画” - “绘画”是指“ing”的后缀。

请注意,情况并非总是如此,因为porter2词干分析算法有时会为词干词添加额外的“e”。