2010-08-30 77 views
2

我正在寻找一种方法,在短语中没有空格(例如twitter上的热门话题),并根据短语中的单词放置空格。据推测某种与字典的比较可以起作用?根据单词/字典插入空格

例如:我有一个功能,用了'septemberwish'这个词(twitter上的当前趋势),它会返回'9月wish'。

回答

1

这将是棘手。你会很容易得到模糊的单词合并,其中几个分离导致有效的单词。

也就是说,你可以使用拼写检查器。请参阅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) 
+0

这将适用于2个字的短语,但难以实施任何短于2个字的词组?它可能会非常迅速地变得非常复杂! – FinnG 2010-08-30 19:18:52

+0

如果你认为它是两个单词,那么不是从中间开始才有用。我对推特一无所知,但是不可能一言难尽? – grossvogel 2010-08-30 19:19:53

+0

pspell的+1,尽管我喜欢从一开始就解析的想法,正如@Piskvor所暗示的那样。 – grossvogel 2010-08-30 19:24:25

1

在最幼稚的做法,开始从开始添加字母字符串,并与给定长度的字典进行比较:例如

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

我想你可以用常用字小字典先试试,或者第一时间最长的单词;或者给较不常用的词语更低的权重。

+0

这也是我的想法,但似乎你必须回过头来,当它是一个以'a',''等开头的单词时。 – grossvogel 2010-08-30 19:27:38

+0

@grossvogel:一些bactracking可能是有序的;尽管在这个特殊情况下,我会说Twitter很方便地为我们过滤这些单词(否则“这个”将是*所有时间的趋势(赦免双关语))。 – Piskvor 2010-08-30 19:30:12