2010-08-30 72 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