回答
從http://pythonhosted.org/pyenchant/tutorial.html
>>> from nltk import everygrams
>>> import enchant
>>> word = 'godaddy'
>>> [''.join(_ngram) for _ngram in everygrams(word) if d.check(''.join(_ngram))]
['g', 'o', 'd', 'a', 'd', 'd', 'y', 'go', 'ad', 'god', 'dad', 'add', 'daddy']
>>> d = enchant.Dict("en_US")
# Exclude single char words.
>>> [''.join(_ngram) for _ngram in everygrams(word) if d.check(''.join(_ngram)) and len(_ngram) > 1]
['go', 'ad', 'god', 'dad', 'add', 'daddy']
嘗試enchant
但如果它是字符串的所有組合,無論它是否是一個有效的英文單詞:
>>> list(everygrams(word))
參見:
- n-grams in python, four, five, six grams?
- Generating Ngrams (Unigrams,Bigrams etc) from a large corpus of .txt files and their Frequency
- extracting n grams from huge text
- Fast/Optimize N-gram implementations in python
- How to compute skipgrams in python?
注
任何字典檢查方法是有其侷限性:
>>> from nltk.corpus import words as english
>>> vocab = set(w.lower() for w in english.words())
>>> "google" in vocab
False
>>> "stackoverflow" in vocab
False
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check('StackOverflow')
False
>>> d.check('Stackoverflow')
False
>>> d.check('Google')
True
的「原則性」的方式做這個任務是做語言建模的人物等級,並有一定概率的方法來檢查的字符序列是否更/不太像英文單詞。
此外,世界上還有很多英語。英式英語中的「有效」單詞可能是美國英語中未知的單詞。見http://www.ucl.ac.uk/english-usage/projects/ice.htm和https://en.wikipedia.org/wiki/World_Englishes#Classification_of_Englishes
首先,得到一組所有英文單詞。我期望有很多庫可以做到這一點,但是對於軟件庫的建議與Stack Overflow無關,所以只需使用你能找到的任何東西。
然後遍歷字符串的所有子字符串,看看它們中的任何一個是否在集合中。
words = #???
s = "godaddy"
for i in range(len(s)):
for j in range(i+1, len(s)):
substring = s[i:j+1]
if substring in words:
print(substring)
結果:
go
god
od
oda
da
dad
daddy
ad
add
執行時間很大。 –
您可以使用nltk.corpus.words
創建一組的所有英語單詞,然後找到的從你的字符串與英文單詞生成的所有可能的字的交叉點:
In [56]: all_words = {st[i:j + i] for j in range(2, len(st)) for i in range(len(st)- j + 1)}
In [57]: english_vocab = set(w.lower() for w in nltk.corpus.words.words())
In [58]: english_vocab.intersection(all_words)
Out[58]: {'ad', 'add', 'addy', 'da', 'dad', 'daddy', 'go', 'god', 'od', 'oda'}
注意的話像OD
或oda
是有效的縮寫。
好的。謝謝。 –
- 1. 從給定的字符串形成所有可能的單詞
- 2. 在可能的英文單詞邊界上分割字符串
- 3. 獲取從字符串中的所有字,直到某個詞
- 4. 從字符串中提取的所有單詞,並用結果
- 5. 從字符串獲取單詞 - PHP
- 6. 在php中獲取非英文字符串的前3個單詞在php中
- 7. 如何在長隨機字符串中找到可能的英文單詞?
- 8. 如何從字符串中獲取指定長度內的所有單詞?
- 9. 如何獲取多種語言的utf8字符串的初始英文單詞?
- 10. 如何獲得在c#中的字符串的所有單詞?
- 11. 從字符串中提取單詞?
- 12. jQuery從字符串中提取單詞
- 13. Ruby:從字符串中提取單詞
- 14. 獲取Ruby字符串中特定單詞後的單詞嗎?
- 15. 如何獲取字符串的單詞?
- 16. 查找給定字符串的全部(英文單詞)子串
- 17. 如何從PHP中的字符串中獲取特定單詞?
- 18. 是否有可能從查詢字符串中獲取字典?
- 19. 程序從字符串中獲取唯一的單詞?爲什麼打印所有單詞
- 20. 獲取所有可能的子字符串的順序
- 21. 英文單詞連字符在俄文
- 22. 從字符串中刪除以「@」開頭的所有單詞
- 23. 獲取字符串的所有可能組合(preffix/suffix)
- 24. 使用Perl獲取所有可能的字符串組合
- 25. 替換utf8中的所有非單詞字符字符串
- 26. 從Javascript中的字符串模式獲取單詞
- 27. 樹枝 - 從字符串中獲取單詞的數量
- 28. VB.NET:從單詞之間的行中獲取字符串
- 29. 從python的「字符串」中獲取一些單詞
- 30. 如何獲取單詞(字符串)?
在我看來,你想使用*特里*(不要與*樹*混淆)。 –