Количество слогов для слов в тексте - PullRequest
3 голосов
/ 04 мая 2011

У меня есть следующий фрагмент кода, чтобы найти количество слогов для всех слов в заданном входном тексте 'sample.txt', используя NLTK:

   import re
   import nltk
   from curses.ascii import isdigit
   from nltk.corpus import cmudict
   import nltk.data
   import pprint

   d = cmudict.dict()

   tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
   fp = open("sample.txt")
   data = fp.read()
   tokens = nltk.wordpunct_tokenize(data)
   text = nltk.Text(tokens)
   words = [w.lower() for w in text]
   print words #to print all the words in input text
   regexp = "[A-Za-z]+"
   exp = re.compile(regexp)

   def nsyl(word):
      return max([len([y for y in x if isdigit(y[-1])]) for x in d[word]])

  sum1 = 0
  count = 0
  count1 = 0
  for a in words:
     if exp.match(a)):
         print a
         print "no of syllables:",nysl(a)
         sum1 = sum1 + nysl(a)
         print "sum of syllables:",sum1
         if nysl(a)<3:
             count = count + 1
         else:
             count1 = count1 + 1

  print "no of words with syll count less than 3:",count
  print "no of complex words:",count1

Этот код сопоставит каждое входное слово сСму словарь и дайте количество слогов для слова.Но он не работает и отображает ошибку, если слово не найдено в словаре, или я использую правильное существительное во входных данных.Я хочу проверить, существует ли слово в словаре, а если нет, пропустить его и продолжить и рассмотреть следующее слово.Как мне это сделать?

1 Ответ

3 голосов
/ 04 мая 2011

Полагаю, проблема в ключевой ошибке.Замените ваше определение на

def nsyl(word):
  lowercase = word.lowercase()
  if lowercase not in d:
     return -1
  else:
     return max([len([y for y in x if isdigit(y[-1])]) for x in d[lowercase]])

И наоборот, вы можете проверить, есть ли слово в словаре, прежде чем вызывать nsyl, а затем вам не нужно беспокоиться об этом в самом методе nsyl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...