2015-04-25 118 views
-4

我正在嘗試使用Python字典對象來幫助將輸入字符串轉換爲其他單詞或短語。我在翻譯輸入中的單個單詞方面取得了成功,但我似乎無法弄清楚如何翻譯多詞短語。掃描Python詞典中的兩個單詞短語

例子:

sentence = input("Please enter a sentence: ") 
myDict = {"hello": "hi","mean adult":"grumpy elder", ...ect} 

我怎樣才能返回hi grumpy elder如果用戶對該輸入進入hello mean adult

+0

這不僅是因爲我分裂輸入到適用於單個單詞短語使用split()方法的單詞列表。然後,我一次處理列表中的一個元素,直到在myDict中找到匹配項。然後我返回結果值。 – golferdrew32

+0

如果您使用'split',請[編輯]您的問題並添加此代碼。但是,爲什麼你首先將輸入分開? –

+0

我們應該如何破譯應該是兩個字的子字符串,三個字的子字符串還是一個字的子字符串,bruteforce的每個組合? –

回答

1

和平時一樣。

translation = myDict['fast car'] 

一個解決您的具體問題將類似於以下,其中maxlen是在字典中的一個短語字的最大數量。

translation = [] 

words = sentence.split(' ') 
maxlen = 3 
index = 0 

while index < len(words): 
    for i in range(maxlen, 0, -1): 
     phrase = ' '.join(words[index:index+i]) 
     if phrase in myDict: 
      translation.append(myDict[phrase]) 
      index += i 
      break 
    else: 
     translation.append(words[index]) 
     index += 1 

print ' '.join(translation) 

鑑於句子hello this is a nice fast car,它輸出hi this is a sweet quick ride

+0

謝謝!這正是我想要的!非常感激。 :) – golferdrew32

2

"fast car"是字典的關鍵,所以你可以,如果你使用它從回來的鍵提取值。

如果你正在服用的輸入從用戶並用它來引用字典,get是安全的,因爲它可以讓你提供一個默認值的情況下,該鍵不存在。

print(myDict.get(sentence, "Phrase not found")) 

既然您已經澄清了您的要求,現在最難的部分就是拆分; get不會更改。如果你可以保證句子的順序和結構(也就是說,它總是會被構造成使得我們有一個單詞,後面跟着一個有兩個單詞的短語),然後只在第一次出現空格字符時進行分割。

split_input = input.split(' ', 1) 
print("{} {}".format(myDict.get(split_input[0]), myDict.get(split_input[1]))) 

更復雜的拆分要求我將作爲練習留給讀者。暗示將使用myDict的鍵來確定句子中存在的有效標記。

+0

但他想在'句子'中找到多個單詞短語,而不是將整個句子作爲關鍵詞。 – chown

+0

「快車」充其量只是一個句子片段。而且,它也是訪問他們想要的數據的關鍵,所以他們爲什麼不使用它?如果他們有比我在這裏表達的更深的關注,那麼他們應該編輯他們的問題,指出這樣的問題。 – Makoto

+0

@chown是正確的,這不是我所需要的。我編輯了原始問題,希望它現在更有意義 – golferdrew32

0

這將檢查每一個字,也使用之前和當前單詞後面的字兩個字的短語,使短語:

myDict = {"hello": "hi", 
      "fast car": "quick ride"} 
sentence = input("Please enter a sentence: ") 
words = sentence.split() 
for i, word in enumerate(words): 
    if word in myDict: 
     print myDict.get(word) 
     continue 
    if i: 
     phrase = ' '.join([words[i-1], word]) 
     if phrase1 in myDict: 
      print myDict.get(phrase) 
      continue 
    if i < len(words)-1: 
     phrase = ' '.join([word, words[i+1]) 
     if phrase in myDict: 
      print myDict.get(phrase) 
      continue