2011-02-15 34 views
0

如果已經回答了這個問題,我表示歉意,但我似乎無法找到描述此過程的頁面。我想要做的是採取一個大文件(紐約時報語料庫),使用分割功能將其更改爲單詞列表,然後搜索特定單詞的長列表。我已經能夠得到蟒蛇打印的文件,此代碼在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') 

但是,而不是複製並粘貼到紐約時報括號開發程序(這不起作用,該文件太大)。我寧願讓它將文件編入變量名稱。

再次,我很抱歉,如果這已經被問及和答覆之前,可能。

回答

1

你可能想要的東西叫做生成器。在你的情況下,它可能是這樣的:

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

我不完全確定它是否重要,以便逐行閱讀。我正在尋找的是它的代碼設置,以便打印(單詞),它會打印有問題的文件。 – 2011-02-15 19:07:27

0

看看nltk。這是一個巨大的項目,它有與語料庫合作的工具。該項目是用Python編寫的,可在http://www.nltk.org/處獲得。

+0

謝謝你指着我說。我相信我遲到了解如何與我正在做的事有關的事情。 – 2011-02-15 19:09:05

+0

我不確定你想要達到什麼目的,但是如果你想獲得單個單詞,你需要使用空格和標點符號來分割每一行,然後將結果添加到某個變量中:`allwords.append(line .split(''))` – marw 2011-02-15 19:16:04

0

我不確定你想要什麼,但你是否在尋找類似的東西?

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

如果你打算用文字做更復雜的事情,你應該看看NLTK包。

0

要計算出現目標詞的次數在語料庫

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' 

性導致的

word "A" occurs 3 times 
word "D" occurs 1 times