2016-04-14 18 views
1

Kullandığım konuşma tanıma yazılımı en uygun sonuçlardan daha azını veriyor.Verilen kelimeyle yakından eşleşen kelimeleri/cümleleri bulmak için nltk'de yerleşik bir yöntem var mı?

Örn:veya mission olarak döndürülür.

Şu anda böyle bir sözlük var:

matches = { 
    'session': ['fashion', 'mission'], 
    ... 
} 

ve eşimi bulmak için tüm kelimeleri üzerinde döngü ediyorum.

Uygulama yalnızca sınırlı sayıda anahtar kelime kabul ettiği için yanlış pozitiflere aldırmam. Ancak, her biri için el ile yeni kelimeler girmek sıkıcıdır. Ayrıca, konuşma tanıyıcı her konuştuğumda yeni kelimelerle geliyor.

Ayrıca, uzun bir kelimenin bir grup küçük sözcük olarak döndürülmesiyle ilgili zorluklarla karşılaşıyorum, bu nedenle yukarıdaki yaklaşım işe yaramayacaktır.

Peki, bunu yapmak için nltk'de yerleşik bir yöntem var mı? Ya da kendim yazabileceğim daha iyi bir algoritma?

cevap

1

Python-Levenshtein'ı incelemek isteyebilirsiniz. Dize mesafeleri/benzerlikleri hesaplamak için bir python C uzatma modülüdür. bu saçma verimsiz kodu gibi

şey işe yarayabilecek:

from Levenshtein import jaro_winkler # May not be module name 

heard_words = "brain" 
possible_words = ["watermelon", "brian"] 

word_scores = [jaro-winkler(heard_word, possible) for possible in possible_words] 
guessed_word = possible_words[word_scores.index(max(word_scores))] 

print('I heard {0} and guessed {1}'.format(heard_word, guessed_word)) 

İşte documentation ve olmayan tutulan repo bulunuyor.

0

fuzzywuzzy, sözcüklerin ve dizelerin bulanık eşleşmesi için bir python paketini kullanabilirsiniz.

Paketi yüklemek için.

pip install fuzzywuzzy 

Sorunuzla ilgili örnek kod. İşte

from fuzzywuzzy import fuzz 

MIN_MATCH_SCORE = 80 

heard_word = "brain" 

possible_words = ["watermelon", "brian"] 

guessed_word = [word for word in possible_words if fuzz.ratio(heard_word, word) >= MIN_MATCH_SCORE] 

print 'I heard {0} and guessed {1}'.format(heard_word, guessed_word) 

fuzzywuzzy ait documentation and repo olduğunu.

İlgili konular