2012-05-31 65 views
0

我具有指示像 頻率的文本文件「讀出1迪克1約翰1書1 讀1不同的1 1不同的1 」 我也有對這些詞語所定義的字典dict = {」 a':1,'book':2}字典在Python

我想用它們的字典值替換單詞。任何人都可以告訴我這是怎麼做的?

+6

這功課嗎? –

+0

這個問題真的不清楚。你想用數字1替換文件中的單詞'a',並用數字2替換文件中的單詞'book'? –

+0

不,這不是一個家庭作業...我做的一些東西作爲實驗 – Tanmoy

回答

1

這很簡單:

text = # your text here 
for word in dictionary: 
    text = text.replace(word, str(dictionary[word])) 

編輯

有關子的問題,你可以使用正則表達式:

import re 
text = # your text here 
for word in dictionary: 
    text = re.sub('^|\s' + word + '\s|$', str(dictionary[word]) + ' ', text) 
+1

這將創建/複製大量的字符串 –

+0

我以前試過...但是,替換有一個問題,它將它替換它找到一個子字符串太...所以例如我的文本是「閱讀1雞巴1約翰1 moby 1」,但它給:10 1 5 1 7 1 mo3 1「。我試圖將字符串轉換爲列表,但沒有發現任何聰明.. – Tanmoy

+0

使用replace會導致以下問題:假設我們有text ='boo book'dict = {'boo':1}使用replace會導致結果:'1k 1' – xvatar

4
text = # your text here 
dictionary = # your dictionary here (don't call it dict!) 
' '.join(str(dictionary.get(word, word)) for word in text.split(' ')) 
+0

text.split()而不是文本。 –

+1

@RajaSelvaraj,我先做了,但是用'join'('')'將任何空格變成一個空格,這可能不是所期望的。 –

+0

在另一方面,我認爲這會導致分裂如果在某些單詞之間有兩個空格,則可以將單詞變成更可靠的單詞。 –

1
import re 
text = # your text here 
dictionary = # your dictionary here (don't call it dict!) 
re.sub("\\b.+?\\b", lambda x: str(dictionary.get(*[x.group()]*2)), text) 
+0

似乎並沒有爲我工作...謝謝你的字典:) – Tanmoy

+0

抱歉它....感謝那...讓我做一些測試:)謝謝你的gnibbler – Tanmoy

+0

順便說一句,我們可以做條目是按照排序的方式輸入的? – Tanmoy

0

你也可以使用re.sub,而是提供一個function as the replacement argument

import re 

frequencies = {'a': 1, 'book': 2} 

input_string = "read 1 dick 1 john 1 book 1 read 1 different 1 a 1 different 1 " 

def replace_if_found(m): 
    word = m.group(1) 
    return str(frequencies.get(word, word)) + m.group(2) 

print re.sub(r'(\w+)(\d+)', replace_if_found, input_string) 

...它給你的輸出:

read 1 dick 1 john 1 2 1 read 1 different 1 1 1 different 1 

的優點有,這只是替換,你有一個或多個單詞字符後跟一個或多個數字。