2014-03-12 221 views
0

我是python的新手,需要幫助查找平均值,例如:每個句子的平均詞數,每個詞的平均字符數,總詞數和句子數量等。我有三個包含大量文本樣本的文本文件。這是我迄今爲止所擁有的。Python:查找平均值

sampleText1 = open("textFile1.txt") 
split1 = sampleText1.split(" ") 
words1 = len(split1) 

這就是我所有的。我一直在想,因爲我不得不爲其他兩個文本文檔重用該代碼,所以我應該創建一個函數或類似的東西。我在Stack Overflow上找到了這個代碼posted by Inbar Rose。我是否應該同樣使用以下代碼?

def clean_up(word, punctuation="!\"',;:.-?)([]<>*#\n\\"): 
    return word.lower().strip(punctuation) # you don't really need ".lower()" 

def average_word_length(text): 
    cleaned_words = [clean_up(w) for w in (w for l in text for w in l.split())] 
    return sum(map(len, cleaned_words))/len(cleaned_words) # Python2 use float 

>>> average_word_length(['James Fennimore Cooper\n', 'Peter, Paul and Mary\n']) 

我想我需要做這樣的事情。任何人都可以幫我找到這些平均值嗎?另外,如果有人知道任何學習Python的好資源,請讓我知道。我目前在Lynda.com上使用http://learnpythonthehardway.org/book/,Khan Academy Python視頻和Python上的一些視頻。

+1

問題是什麼?你有沒有試過*使用該代碼? – jonrsharpe

+1

縮進在Python中很重要。請更正發佈的代碼,使其有效。 – unholysampler

+1

這不是你的問題的答案,因爲我懷疑你想寫這些方法來學習如何去做,但有一個Python自然語言處理庫,用文檔做一些非常複雜的事情。也許你會想看看它的想法:http://www.nltk.org/ – duffymo

回答

1

所述的問題是要求編碼方面的建議,而不是尋找具體的錯誤。但在這種情況下的建議很難給出,因爲你的代碼的結構(你應該有一個函數來讀取數據還是多個函數?)真的取決於你還沒有指定的許多其他東西,比如:多少文本(它能輕鬆適應內存嗎?你想避免循環遍歷整個語料庫還是沒有什麼大不了的?),你會做多少次計算,重新使用它等等。

文本的數量越大,這些問題就越多地變得微妙,並且可能會有更微妙的反應。

現在,與「如何得到這個工作」有些相關的是「我希望這樣做」。作爲一名數據科學家,我的建議是首先在一個小樣本上開展工作,並看看它是否有用。

但是如果要計算每一句話的平均數量,試試這個樣本量很小,你想要什麼就可以了迭代,直到它可以讓你:

for sentence in sampleText1.split("."): 
    print sentence 

這是否看行嗎?也許你想擔心橢圓或不? 如果它看起來不錯,然後嘗試尋找:

for sentence in sampleText1.split("."): 
    print sentence.split(" ") 

這是如何工作的?你是否想擔心雙重空間?連字符怎麼樣?等等。? 如果確實如此,那麼在

sentence_lengths = [len(sentence.split(" ")) for sentence in sampleText1.split(".")] 
the_mean = 1. * sentence_lengths.sum()/len(sentence_lengths) 
print "average sentence length: %s"%(the_mean)