манипулирование и поиск в больших файлах в Python - PullRequest
0 голосов
/ 15 февраля 2011

Я прошу прощения, если на этот вопрос уже был дан ответ, но я не могу найти страницу, которая описывает этот процесс.То, что я пытаюсь сделать, это взять большой файл (New York Times Corpus), изменить его на список слов с помощью функции split, а затем найти в этом длинном списке определенные слова.Мне удалось заставить python напечатать файл с этим кодом

words=open('nyt.txt')
for line in words:
    print (line)

, но я бы хотел потом использовать words.split () для этой функции.

До сих пор я разрабатывал программу с использованием небольшого корпуса, который просто набираю вот так

words= ('A B. C D E F G A. B C D E F G A B C D E F G A B C D E F G')

, но вместо того, чтобы копировать и вставлять nyt в скобки (это нене работает, файл слишком большой).Я бы предпочел, чтобы он был источником файла в имя переменной.

Еще раз прошу прощения, если об этом уже спрашивали и отвечали, что вполне вероятно.

Ответы [ 4 ]

1 голос
/ 15 февраля 2011

То, что вы, вероятно, хотите, называется генератор .В вашем случае это может выглядеть так:

def words(lines):
    for line in lines:
        for word in line.split():
            yield word

Это обрабатывает файл построчно, поэтому ему не нужно считывать весь файл в память сразу.Ключевое слово yield превращает результат функции в генератор.Использование:

import sys
for word in words(sys.stdin):
    print word

Редактировать: Если я правильно вас понимаю в этот раз, вы просто хотите прочитать все слова в списке?Достаточно просто:

lines = open('nyt.txt')
words = []
for line in lines:
    words.extend(line.split())
print words
0 голосов
/ 15 февраля 2011

Чтобы подсчитать, сколько раз ваше целевое слово встречается в корпусе

corpus = ('A B C A B C', 'A D')
target = {'A':0, 'D':0}
# also works for a file
# for line in open('file.txt'):
for line in corpus:
    for word in line.split():
        if word in target:
            target[word] += 1
for (word, count) in target.iteritems():
    print 'word "' + word + '" occurs ' + str(count) + ' times'

Begets

word "A" occurs 3 times
word "D" occurs 1 times
0 голосов
/ 15 февраля 2011

Я не уверен, что вы хотите, но вы ищете что-то подобное?

words = open('README')
word_list = []
for l in words:
     word_list.append(l)

Если вы собираетесь делать что-то более сложное со словами, вы должны посмотреть на NLTK пакет.

0 голосов
/ 15 февраля 2011

Взгляните на nltk. Это огромный проект, в котором есть инструменты для работы с корпорациями. Проект написан на Python и доступен по адресу http://www.nltk.org/.

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