2013-07-10 1 views
0

Я пишу вложенный цикл, чтобы судить, являются ли два слова похожими на произношение. Мой код выглядит следующим образом:python appending items в словаре с циклом for

wordsDict = nltk.defaultdict(list) 
for s1 in prondict[word1]: 
    for s2 in prondict[word2]: 
     sm=difflib.SequenceMatcher(None, s1, s2) 
      if (sm.ratio != 1 and sm.ratio >= 0.6): 
       #push word2 into the dict with key word1 
       wordsDict[word1].append(word2) 

Результатом должен быть словарь под названием wordsDict. Например, ключевой «университет» будет иметь значение «юбилей», так как их фонема схожа (соотношение см. 0,66666, что больше 0,6), но когда ввод «университет» и «хороший», «хороший» будет также присоединяться к ключевому «университету», но на самом деле сходство «университет» и «хорошее» составляет 0,0, менее 0,6. Кажется, моя инструкция «if» не работает. Как заставить оператор «if» работать?

+1

Ваше утверждение 'if' представляется правильным. Я действительно задаюсь вопросом об отступе - не должен питон жаловаться на то, что ваш 'if' отступом w.r.t. предыдущая строка? Вы можете напечатать значение 'sm.ratio' прямо перед' if' (и, возможно, добавить 'else' для отладки?) – Floris

+0

Я решил его, сначала получив значение sm.ratio(), а затем сравните его с 0.6 , Спасибо! – noben

ответ

2

Проблема в том, как вы используете sm.ratio. sm.ratio - это функция. Чтобы получить значение, которое вам нужно, попробуйте позвонить ему: sm.ratio()

In [77]: sm = difflib.SequenceMatcher(None, "university", "anniversary") 

In [78]: sm.ratio 
Out[78]: <bound method SequenceMatcher.ratio of <difflib.SequenceMatcher instance at 0x104d00488>> 

In [79]: sm.ratio() 
Out[79]: 0.6666666666666666 
+0

Да! Я решил это, получив значение sm.ratio(), а затем сравним его с 0.6. Спасибо! – noben

 Смежные вопросы

  • Нет связанных вопросов^_^