2017-03-05 88 views
1

我正在嘗試搜索文本字符串中的某些單詞/字符串,並將它們的位置放入字典中。查找字符串中不同單詞的位置不重疊

一個示例將更好地解釋我正在嘗試完成什麼以及我的問題。

content = """Learning python is something I always wanted to do. The fact that python is a simple and intuitive language made me feel bad for learning other programming languages in the first place. I think the main reason why I didn't choose the python language was the fact that I didn't do a proper research about the pros and cons of the available programming options. I gues that writing this paragraph about learning the python language it's harder than the python script I'm trying to accomplish. No, I'm just kidding, if this was the case then I would have completed writing the python languaguage and didn't bother you guys anymore.""" 

mylist = ['python', 'dummy keyword', 'python language', 'learning the python language', 'another keyword'] 

dictKw = {} 
for x in mylist: 
    x = x.lower() 
    listKw = [] 
    for m in re.finditer(x, contentLower): 
     #print (x , " found " , m.start(), m.end()) 
     listKwPos = [] 
     listKwPos = [m.start(), m.end()] 
     listKw.append(listKwPos) 
     dictKw [x] = listKw 

print dictKw 

所以在這裏我搜索內容串在MYLIST發現每個關鍵詞和我存儲每一次出現的開始和結束位置到字典中具有關鍵字作爲重點和列表列表中的關鍵字位置。

打印dictKw我得到:

{'python': [[9, 15], [66, 72], [234, 240], [414, 420], [451, 457], [574, 580]], 'learning the python language': [[401, 429]], 'python language': [[234, 249], [414, 429]]} 

首先,我認爲關鍵訂購字典是錯誤的 - 蟒蛇,學習Python語言,Python語言,而不是蟒蛇, python語言,學習python語言。我看到,追加listKw列表時,它就把學習Python語言關鍵蟒蛇和語言之間蟒蛇,而不是將其放置在年底。

我認爲正確的結果應該是:

{'python': [[9, 15], [66, 72], [234, 240], [414, 420], [451, 457], [574, 580]], 'python language': [[234, 249], [414, 429]], 'learning the python language': [[401, 429]]} 

現在我想刪除這些關鍵字相互重疊保持第一關鍵字的初始優先級列表中的元素在MYLIST

在我們的示例中python重疊python語言所以第一次發生這種情況時,python語言應該失去冷杉的位置t列表所以結果將是:

{'python': [[9, 15], [66, 72], [234, 240], [414, 420], [451, 457], [574, 580]], 'python language': [[414, 429]],'learning the python language': [[401, 429]]} 

當用於檢查剩餘的重疊優先應該改變以便蟒將失去重疊列表中的元素,因此結果將是:

{'python': [[9, 15], [66, 72], [234, 240], [451, 457], [574, 580]], 'python language': [[414, 429]],'learning the python language': [[401, 429]]} 

等上。所以如果我們遇到第三個重疊,優先級應該再次切換到python,所以python語言會丟失開始/結束元素列表。

此檢查完成後的Python語言學習Python語言重疊檢查應遵循導致去除學習Python語言辭典鍵列表值。

最終的結果應該是:

{'python': [[9, 15], [66, 72], [234, 240], [451, 457], [574, 580]], 'python language': [[414, 429]],'learning the python language': [[]]} 

現在爲這個重疊的問題的一部分,我不知道從哪裏開始,所以我請求你們的幫助,以點我到正確的方向或可能提供另一種方法我正在努力完成的。

請注意,mylist元素可以具有任何其他順序,並且元素的順序決定關鍵字的優先級 - 最高優先級的元素具有最高優先級。

+0

字典中的鍵沒有定義的順序!所以,你不能說,有錯誤的順序。打印字典對象時,鍵值以隨機順序打印。 – phynfo

+1

此外,它似乎,你的例子是不健全的。當你試圖避免重疊時,你應該考慮'python'和'python language'的重疊,並去掉'python'關鍵字的'[414,420]' - 匹配! – phynfo

回答

0

請注意,在python中,字典{"a": 1; "b": 2; "c": 3}{"b":2 ; "a" : 1; "c": 3}是等效的 - 默認情況下,這些密鑰是完全無序的。爲了解決這個問題,你可以使用一個OrderedDict,它將通過順序鍵/值對將詞典的元素添加到它們中。

相關問題