2011-05-16 50 views
6

我看到了使用Markov chains用於基於源數據隨機單詞的例子很多,但他們往往似乎有點過於機械和抽象給我。我正在努力開發一個更好的。建立一個更現實的隨機單詞生成器?

我認爲問題的一部分是,他們完全依賴於對整體統計發生,而忽視詞的傾向開始在某些方面結束。例如,如果您使用前1000名嬰兒名稱作爲源數據,則字母J的整體比較少見,但它是起始與第二個最常用的字母。或者,如果您使用的是拉丁語源數據,那麼類似-um和-us這樣的單詞結尾將是常見的結尾,但如果您認爲所有對都相同,則不常見。

所以,我基本上是試圖把一個馬爾可夫鏈,基於單詞發電機,考慮到在源數據字啓動方式和結束。

從概念上講,這是有道理的我,但我無法弄清楚如何從軟件的角度實現這一點。我試圖把一個小小的PHP工具放在一起,它允許你放入源數據(例如,一個1000字的列表),然後它將生成各種隨機的單詞,包括真實的開始,中間和結尾。 (相對於大多數基於馬爾可夫字發生器,其只是基於對所述統計總體發生。)

我也想與由源數據確定字長,如果可能這樣做;即隨機生成的單詞的長度分解應該與源數據的長度分解大致相同。

任何想法,將大規模感激!謝謝。

回答

3

如果你認爲「詞語之間的空間」是一個符號,那麼關於不尊重共同的開始和結尾的部分實際上並不是真實的 - 常見的開始將具有「詞之間的空格」之後的高頻率,並且普通的結尾將具有高的「詞之間的空間」之前的頻率。正確的單詞長度也會自然或多或少地平息 - 在轉換爲「單詞之間的空格」符號之前,您輸出的平均字母數應等於訓練數據中每個單詞的平均字母數,但我腦海中的後面告訴我分配可能會關閉。

+0

謝謝,霍布斯!這實際上是我終於找到的解決方案。我意識到一個詞的開始和結尾本身可能是事物,所以我分配了一個角色來表示它們。之後事情很好地落到了地方。 :-) – 2011-05-17 04:05:25