2014-02-20 2 views
0

В моем классе CS мне было поручено прочитать во всем корпусе пьесы и сонеты Шекспира и распечатать количество раз, когда происходит определенное слово. Может ли кто-нибудь помочь мне снять ноги с земли. Вот первый уровень поэтапного уточнения, который я дал.Токенизация файла

Уровень 0 Определите функцию, которая токенизирует файл, возвращая массив токенов. Прокручивайте массив, печатая каждый токен в строке. Например, ваш специализированный основной может выглядеть примерно так:

def main(): 
    tokens = readTokens("shakespeare.txt") 
    for i in range(0,len(tokens),1): 
     print(tokens[i]) 

Я думаю, мой вопрос заключается в том, как я разметить файл, а затем прочитать его в массив в Python? Извините, если этот вопрос не для чего предназначен этот сайт, я просто ищу какую-то помощь. Благодарю.

+0

Ваш вопрос слишком широк. Дайте некоторые вещи, которые вы пробовали, а что не сработало/частично работало, вы с большей вероятностью получите помощь. –

+2

Как вы определяете «токены» в вашем случае? – poke

ответ

2
goodletters = set("abcdefghijklmnopqrstuvwxyz' \t") 

def tokenize_file(fname): 
    tokens = [] 
    with open(fname) as inf: 
     for line in inf: 
      clean = ''.join(ch for ch in line.lower() if ch in goodletters) 
      tokens.extend(clean.split()) 
    return tokens 

На этот раз для наглядности; в производстве я бы использовал inf.read().translate(), но настройка для этого существенно отличается для Python 2.x vs. 3.x, и я бы предпочел не быть более запутанным, чем необходимо.

+0

+1 TIL использование 'goodletters';) – zhangxaochen

0
from collections import Counter 

def readTokens(file): 
    tokens = Counter() 
    with open(file) as f: 
     for line in f: 
      tokens += Counter(word.strip() for word in line.split()) 
      # if you're trying to count "Won't", "won't", and "won't!" 
      # all together, do this instead: 
      ## tokens += Counter(word.strip('"!?,.;:').casefold() for word in line.split()) 
    return tokens 

def main(): 
    tokens = readTokens('shakespeare.txt') 
    for token in tokens: 
     print(token) 
    print("The most commonly used word is {}".format(max(tokens.items(), key= 
                lambda x: x[1]))) 
+0

Использование счетчика хорошо, однако это будет считаться то есть« не будет »,« не будет »и« не будет ». как отдельные слова (он не разделяет пунктуацию или нормализацию капитализации). –

+0

@HughBothwell Без дополнительной информации от OP, трудно сказать, хочет он этого или нет. Я реализовал голые кости, но без дальнейших входных данных я не хочу листать текст ввода. –

+0

@HughBothwell Это сказало, я думаю, что ваша реализация «хороших букв» велика! Я считал, что украл его;). Может быть, мы должны объединить наши ответы? –

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