2014-03-29 38 views
0

我希望能夠得到匹配一個非常簡單的約束的字典(文本文件)中的所有單詞。如何根據簡單約束在字典中找到單詞?

這裏是我想要達到的幾個例子:

  • 對於字符串「ABCD」,查找所有的單詞,「a」和含「B」開頭,「c」和「d」的至少一個時間
  • 對於字符串「BCCD」,尋找所有單詞以「b」開始,包含至少兩個「c」和至少一個「d」(「bydcuc」和「bicdzcd」是有效字)

字符串中的第一個字母總是應該開始的單詞,下列字母應該是b e包含至少它們出現在字符串中的次數。

例如,字符串「胸罩」可以返回「芭芭拉」,如能串「巴爾」或「柏拉」。

我的第一個想法是使用正則表達式,但我沒能說的字母可以按任意順序被發現。我不想用排列構建正則表達式。

我的第二個想法是通過所有的話環路與我的第一個字母開頭。對於每一個單詞,我會檢查它們是否包含正確的字母。但是,因爲我想要高效率,這似乎不太可以接受。

你有我如何能做到這一點的一個很好的和有效的方式什麼想法?

我已經習慣了蟒蛇,但我接受任何其他建議用於此目的。 (也許一個數據庫,而不是一個txt文件?)

回答

1

[注]:我會用這個詞list因爲我蟒蛇但是面向它可以listarrayArrayList,無論...

第一測試

將其逐個縮小。首先列出文本文件中的所有單詞。 運行以some_char開頭的第一個測試,然後創建一個新列表,其中包含與第一個條件匹配的所有單詞。對於這一個,您可以從輸入字符串中獲取第一個字符,然後使用regex來匹配所有單詞,如下所示:(可能通過使用循環測試每個單詞並將其添加到新列表(如果它符合條件))

我將使用 'abbbc'

'^a.*'

第二個測試的例子

然後,您可以按以下運行你的第二個測試:

1)獲取第二個字符(索引1),在我的情況下它是'b'並且計算它在字符串中出現的次數,在我的情況下它是3

2)對於縮小列表中的每個單詞,請計算特定字符出現的次數(對我來說爲'b'),並且如果它大於或等於3(或計數在原始字符串中的任何值),將其添加到新列表中。

第三個測試

重複多次,必需在原來的字符串(「abbbc」)的每個字符的第二次測試,每次縮小由這些標準允許的單詞列表。

結果

最後,您應該有一個滿足您的要求的單詞列表。

[注]

我知道,這似乎漫長的,但它應該是比較容易的程序。

祝你好運。希望有所幫助。

+0

感謝您的明確答案。這正是我在第二個想法中想到的(儘管我會對模式中的字母做一個foreach,而不是對這些字母中的字母進行分類)。但是對於一本非常大的字典,恐怕要花太多內存來加載完整的單詞列表。你認爲一個100MB的文件可以嗎? – mimipc

+0

@mimipc,我建議你把你的文件分成'dict1.txt','dict2.txt','dict3.txt' ...等幾個文件。另外,我認爲更小的塊可以更好地適應內存。 – sshashank124

+0

是的,我想分開它的第一個字母(a.txt,b.txt,...) – mimipc

相關問題