Pracuję nad wykrywaniem rymów w Pythonie za pomocą słownika wymowy Carnegie Mellon University i chciałbym wiedzieć: Jak mogę oszacować podobieństwo fonetyczne między dwoma słowami? Innymi słowy, czy istnieje algorytm, który może zidentyfikować fakt, że "ręce" i "plany" są bliższe rymowaniom niż "ręce" i "frytki"?Oszacowanie fonemów podobieństwa między dwoma słowami
Niektóre kontekst: Na początku byłem skłonny powiedzieć, że dwa słowa rymować jeśli ich głównym podkreślił, sylaby i wszystkie kolejne sylaby są identyczne (c06d jeśli chcesz replikować w Pythonie):
def create_cmu_sound_dict():
final_sound_dict = {}
with open('resources/c06d/c06d') as cmu_dict:
cmu_dict = cmu_dict.read().split("\n")
for i in cmu_dict:
i_s = i.split()
if len(i_s) > 1:
word = i_s[0]
syllables = i_s[1:]
final_sound = ""
final_sound_switch = 0
for j in syllables:
if "1" in j:
final_sound_switch = 1
final_sound += j
elif final_sound_switch == 1:
final_sound += j
final_sound_dict[word.lower()] = final_sound
return final_sound_dict
Gdybym następnie uruchomić
print cmu_final_sound_dict["hands"]
print cmu_final_sound_dict["plans"]
widzę, że ręce i plany brzmią bardzo podobne. Mógłbym pracować nad oszacowaniem tego podobieństwa na własną rękę, ale pomyślałem, że powinienem zapytać: Czy istnieją wyrafinowane algorytmy, które mogą powiązać wartość matematyczną z takim stopniem podobieństwa dźwięku (lub dźwięku)? To jest, jakie algorytmy lub pakiety można użyć do z matemalizowania stopnia podobieństwa fonologicznego między dwoma słowami? Zdaję sobie sprawę, że jest to duże pytanie, ale byłbym wdzięczny za rady, które inni mogą zaoferować w tej sprawie.
Dlaczego dół głos i przenieść się zamknąć? Co mogę zrobić, aby poprawić pytanie? – duhaime
Szukasz czegoś takiego jak algorytm Soundex (http://en.wikipedia.org/wiki/Soundex)? – acfrancis
Nie mogę mówić za downwizera, ale powód podany przy zamykaniu głosowania jest taki, że twoje pytanie wygląda tak, jakby to było [z prośbą o rekomendacje] (http://meta.stackoverflow.com/questions/254393/what-exactly-is -a-zalecenie-pytanie). Możesz go przeformułować, aby wyraźniej zapytać: "Jak mogę zrobić X? *", A nie "* Z jakiego narzędzia powinienem korzystać X? *" –