2010-05-14 40 views
2

這個被關聯到一個問題,我問較早(question)計算字符串已被隨機化的概率? - Python的

我有手動創建的字符串,如列表:

lucy87

gordan_king

fancy_unicorn77

joplucky_kanga90

base_belong_to_narwhals

列表隨機字符串:

johnkdf

pancake90kgjd

fancy_jagookfk

manhattanljg


是什麼讓遠的字符串的最後一組是隨機的是序列,如'KJG', 'JGF', 'LKD', ...。

任何聰明的方式,我可以分開包含這些顯然隨機化字符串從人羣中的字符串?

我想這對於某些字符更可能與其他字符相鄰放置的事實(例如'co','ka','ja',...)有很大關係。


對此問題的任何建議? Kylotan提到牧師,但我不確定它是否可以用fr這樣的目的。

幫助將不勝感激!

+1

所有這些「隨機」序列,你提到似乎不是隨機的對我說:他們都是從鍵盤的母排。此外,你爲什麼會認爲「kjg」是隨機的,但「87」不是? – interjay 2010-05-14 10:59:08

+0

我相信'nga'也不會是一個非常流行的結局。 – SilentGhost 2010-05-14 10:59:25

+0

@interjay:我需要以某種方式測量一個字符串是隨機的概率,而不是一個是或否的答案。我想'kjg'比'87'更有可能是隨機的 – RadiantHex 2010-05-14 11:15:27

回答

4

這只是一個想法。我從來沒有嘗試過...

構建一個布隆過濾器,用於散列在字典中找到的每個(重疊)4個字母的序列。通過計算字符串中有多少4個字母的序列不會碰到過濾器來測試一個字符串。更多的錯過,這個詞包含隨機垃圾的可能性就越大。

嘗試調整布隆過濾器的大小和每個序列的字母數。

另請注意(感謝@MihaiD)您應該在布隆過濾器中包含一個名稱字典(最好來自多種語言),以最大限度地減少誤報。

+0

聽起來不錯。在一天結束時,「隨機」沒有客觀的定義 - 你必須決定你認爲不是隨機的,然後尋找它。這聽起來像一個很好的方式.. – fenomas 2010-05-14 11:06:10

+1

這可能是最好的方法。然而用戶名往往不像正常的詞,人們傾向於使用各種古怪的縮寫。如果用戶名包含來自多種語言的單詞,您也會遇到問題,因爲您的分類器是用英語單詞訓練的(對多種語言進行訓練會使檢測「隨機」單詞變得越來越難)。 – 2010-05-14 11:11:13

+0

@MihaiD,謝謝你指出。我會修改答案。 – 2010-05-14 11:17:22

1

嘗試使用香草貝葉斯分類器。一般情況下應該足夠了。

1

在我看來,像你嘗試寫代碼到一個certian特定的一組微小的東西一些垃圾郵件發送者會識別爲一個字符串闖過您的過濾器。我沒有看到的是什麼阻止他們,畢竟你的努力工作,對他們的算法進行10秒的調整並擊敗你的新過濾器。

+0

@ T.E.D。它實際上是垃圾郵件條目中最常見的發生。 – RadiantHex 2010-05-14 11:17:19

+0

這不是我的觀點。可能會有一天,所有的垃圾郵件發送者都會以「omgponies」結尾所有用戶名。這並不意味着禁止用戶名中的「omgponies」會使他們放慢一點。 – 2010-05-14 14:27:58

1

前段時間我讀到隨機名稱的產生,很短的文章,他們做了以下內容:他們建立了一個包含你已經對準了信息的表:「我想,這起到了很多的事實是,某些字符更可能被放置在其他人旁邊「。

他們這樣做了什麼,他們讀了整部字典,並確定其中的字母放在更可能到每個人。我不知道,他們考慮過多少封信。也許你應該嘗試不止兩個連續的字母,比如說3到6之間的數字。

現在我建議你填寫這樣的表格(可能是更好的數據結構表示形式),它包含所有「有效」連續字母組合(也許它們的可能性),看看你的名字是否包含(幾乎)只有這樣的「有效」連續字母。

2

你什麼分數,如果你通過像textcat運行字符串? (我已經看到了一些不同的TextCat實現;也許有一個Python已經在那裏;如果沒有,它不是一個硬算法 - 這是重要的數據。)

我在想,如果你去掉數字出來,第一組字符串將更接近TextCat中的「英語」結果,而不是那些帶有隨機東西的結果。

更接近多少,以及您是否可以使用TextCat數據(基本上基於哪些字母在特定語言中彼此相鄰)來「傳遞」或「失敗」字符串是將需要一些試驗,但...