2013-02-08 58 views
0

我必須從單詞數據集中訓練語言模型。爲此,我需要將所有文本排列在一列中,因爲這是模型工作的唯一方式。到現在爲止,我可以根據需要使用Python將文檔拆分爲一列,而不會出現任何問題。從python中的列表中的符號解析單詞

例如:根據需要

Zomer, 
1951. 
De 
wereld 
bestond 
uit 
het 
wazige 
blauw 
van 
een 
wolkenloze 
zomerhemel, 
het    
goudgroen 
van 
koel, 
geruststellend 
naaldbos 
en 
het  
lijnrechte  
wit 
van 
de  
betonnen  
weg, 
die 
nieuw  
was, 
hij 
stond 
nog 
op  
geen 
enkele 
kaart. 

當我試圖採取符號(逗號,冒號,分號等)到一個新的行中的問題開始 申請公開說明書

Zomer, 1951
De wereld bestond uit het wazige blauw van een wolkenloze zomerhemel, het goudgroen van koel, geruststellend naaldbos en het lijnrechte wit van de betonnen weg, die nieuw was, hij stond nog op geen enkele kaart.

文獻並且在每次完全停止後包括額外的空白空間(。) 例如:

Zomer 
, 
1951 
. 

De 
wereld 

我還沒有找到適當的方法來做到這一點。到目前爲止,我已嘗試使用不同的方法,例如使用.split().find()等功能,但沒有任何積極的結果。打開文件後:

fileHandle = open("C:\Language Model\Corpora\Computing Clients 3.txt",'r') 

我已經嘗試過循環和條件,但沒有任何工作。和所有到現在爲止得到的結果是:

AttributeError: 'list' object has no attribute 'find' 

我知道也許我失去了一些東西,這就是爲什麼我問你寶貴的幫助,因爲這些文件是如此巨大,這將是無用做手工知道Python可以爲我做到這一點。

+0

請出示了「循環和條件」您已嘗試 – fnokke 2013-02-08 15:05:38

+0

您如何看待任何人是不相關的代碼要去幫助? – XORcist 2013-02-08 15:05:47

+0

我很肯定nltk有一個方法 – dm03514 2013-02-08 15:07:33

回答

0

我認爲如果確保標點符號與空格分隔,就可以達到目的。正則表達式在任何非字母數字字符之前加上一個空格,因此它可以是split與任何前面的單詞分開。

>>> import re 
>>> text = "Zomer, 1951 De wereld bestond uit het wazige blauw van een wolkenloze zomerhemel, het goudgroen van koel, geruststellend naaldbos en het lijnrechte wit van de betonnen weg, die nieuw was, hij stond nog op geen enkele kaart." 
>>> text2 = re.sub(r'([^a-zA-Z0-9-]+)',r' \1',text) 
>>> text2 
'Zomer , 1951 De wereld bestond uit het wazige blauw van een wolkenloze zomerhemel , het goudgroen van koel , geruststellend naaldbos en het lijnrechte wit van de betonnen weg , die nieuw was , hij stond nog op geen enkele kaart .' 
>>> text2.split() 
['Zomer',                  
',',                   
'1951',                   
'De',                   
'wereld', 
'bestond', 
'uit', 
'het', 
'wazige', 
'blauw', 
'van', 
'een', 
'wolkenloze', 
'zomerhemel', 
',', 
'het', 
'goudgroen', 
'van', 
'koel', 
',', 
'geruststellend', 
'naaldbos', 
'en', 
'het', 
'lijnrechte', 
'wit', 
'van', 
'de', 
'betonnen', 
'weg', 
',', 
'die', 
'nieuw', 
'was', 
',', 
'hij', 
'stond', 
'nog', 
'op', 
'geen', 
'enkele', 
'kaart', 
'.'] 
+0

@fnokke和moter我不是程序員,我幾天前開始在這個領域工作,我才意識到保存你所做的一切是多麼重要,但是我沒有與我的嘗試。所以我唯一的代碼是用來分割文件的,對不起。 – anmocor 2013-02-08 15:38:49

+0

謝謝你的回覆。我跟着你的代碼,現在我想了解錯誤消息:Traceback(最近調用最後一個): 文件「C:/ Users/Language Model/Corpora/answers.py」,第9行,在 text2 = re。 sub(r'([^ a-zA-Z0-9 - ] +)',r'\ 1',text) 返回文件「C:\ Python27 \ lib \ re.py」,第151行,返回 _compile(模式,標誌)。sub(repl,string,count) TypeError:預期的字符串或緩衝區。現在我正在檢查所有這些的含義,如果我能解決問題,我會告訴你。 – anmocor 2013-02-08 15:43:07

3

如果你的文件的名稱是那麼paragraph.txt

f = open('paragraph.txt', 'r')

words = []

lines = f.readlines()

for line in lines:

words.extend(line.split()) 

以上線路做出的所有單詞

而這些刪除列表。並且,從這些話

for i in range(len(words)):

words[i] = words[i].replace('.' ,'') 

    words[i] = words[i].replace(',' ,'') 

    #here you can add a line to remove some other character 

對於打印的話:

for word in words:

print(word) 
+0

@isedev:嗨,我發現了錯誤,我可以運行代碼。謝謝。 – anmocor 2013-02-11 13:04:35

+0

感謝您的信息,我實現它來修改特殊字符。 – anmocor 2013-02-11 13:05:25