我正在寻找一种方法,在短语中没有空格(例如twitter上的热门话题),并根据短语中的单词放置空格。据推测某种与字典的比较可以起作用?根据单词/字典插入空格
例如:我有一个功能,用了'septemberwish'这个词(twitter上的当前趋势),它会返回'9月wish'。
我正在寻找一种方法,在短语中没有空格(例如twitter上的热门话题),并根据短语中的单词放置空格。据推测某种与字典的比较可以起作用?根据单词/字典插入空格
例如:我有一个功能,用了'septemberwish'这个词(twitter上的当前趋势),它会返回'9月wish'。
这将是棘手。你会很容易得到模糊的单词合并,其中几个分离导致有效的单词。
也就是说,你可以使用拼写检查器。请参阅pspell扩展。
一个算法可以在不同的点分离单词,直到它产生两个有效的单词。例如:
septem berwish (split at floor(length/2); both invalid) septemb erwish (split at floor(length/2)+1; both invalid) septe mberwish (split at floor(length/2)-1; both invalid) septembe rwish (split at floor(length/2)+2; both invalid) sept emberwish (split at floor(length/2)-2; first valid, second invalid) september wish (split at floor(length/2)+3; both valid; stop)
对于超过两个单词,需要另一种方法。一种可能性是,直到你有一个有效的词从终端删除字符,然后做同样的休息未得到匹配:
septemberwishtwo (invalid) septemberwishtw (invalid) ... september (valid; got the first) wishtwo (invalid) ... wish (valid; got the second) two (valid; got the third)
在最幼稚的做法,开始从开始添加字母字符串,并与给定长度的字典进行比较:例如
s // no match
se // no match
sep // no match
...
september // match! add space, add to output
// continue where we left off
w // no match
wi // no match
wis // no match
wish // match! add space, add to output
end of string, terminate
棘手位:有可能是可以被解析成不同的短语(the-site-that-shall-not-be-named,一个)的字符串。其实,你的例子是一个(虽然一个字不常见):
septemberwish VS septemberwish
我想你可以用常用字小字典先试试,或者第一时间最长的单词;或者给较不常用的词语更低的权重。
这也是我的想法,但似乎你必须回过头来,当它是一个以'a',''等开头的单词时。 – grossvogel 2010-08-30 19:27:38
@grossvogel:一些bactracking可能是有序的;尽管在这个特殊情况下,我会说Twitter很方便地为我们过滤这些单词(否则“这个”将是*所有时间的趋势(赦免双关语))。 – Piskvor 2010-08-30 19:30:12
这将适用于2个字的短语,但难以实施任何短于2个字的词组?它可能会非常迅速地变得非常复杂! – FinnG 2010-08-30 19:18:52
如果你认为它是两个单词,那么不是从中间开始才有用。我对推特一无所知,但是不可能一言难尽? – grossvogel 2010-08-30 19:19:53
pspell的+1,尽管我喜欢从一开始就解析的想法,正如@Piskvor所暗示的那样。 – grossvogel 2010-08-30 19:24:25