2016-09-19 2 views
-5

단어로 구성된 source.txt 파일이 있습니다. 각 단어는 새 줄에 있습니다.다차원 사전을 만들어 단어 발생을 계산하십시오.

apple 
tree 
bee 
go 
apple 
see 

또한 taget_words.txt 파일도 있습니다.이 파일의 단어도 한 줄씩 있습니다.

apple 
bee 
house 
garden 
eat 

는 지금은 소스 파일의 대상 각각의 단어를 검색 할 수 있습니다. 타겟 단어가 발견되면, 예를 들어. 사과, 대상 단어에 대한 사전 항목 및 앞뒤 3 단어 각각을 작성해야합니다. 예제의 경우, 그 것이다

words_dict = {'apple':'tree', 'apple':'bee', 'apple':'go'} 

어떻게 생성하고 이전과 source_file에 기입 한 후이 세 단어를 고려하는 사전을 채우기로 파이썬을 알 수 있습니까? 제 아이디어는 목록을 사용하는 것이 었습니다. 그러나 파일이 수백만 단어로 구성되어 있기 때문에 코드는 매우 효율적이고 빠르다는 것이 이상적입니다. 나는리스트를 가지고 계산이 매우 느릴 것이라고 생각한다.

from collections import defaultdict 

words_occ = {} 
defaultdict = defaultdict(words_occ) 
with open('source.txt') as s_file, open('target_words.txt') as t_file: 
    for line in t_file: 
     keys = [line.split()] 
    lines = s_file.readlines() 
    for line in lines: 
     s_words = line.strip() 
     # if key is found in s_words 
     # look at the 1st, 2nd, 3rd word before and after 
     # create a key, value entry for each of them   

나중에, 나는 각 키 값 쌍의 발생을 계산하고 별도의 사전에 번호를 추가 할 필요가 나는 defaultdict 시작, 그 이유이다.

나는 위의 코드에 대한 제안 사항에 대해 기뻐할 것입니다.

+2

이 작업을 수행하는 방법에 대한 단서가 전혀 없다면 Python 용 사전을 읽어 보시기 바랍니다. https : //docs.python.org/3.5/tutorial/datastructures.html#dictionaries – MooingRawr

+3

".. apple이라는 단어에 대한 다차원 사전을 만듭니다. 그것은 정확하게 (당신에게) 정확히 무엇을하려고하는지 명확하지 않습니다. – asherbar

+0

당신이 묘사하는 것은 "다차원"사전처럼 들리지 않습니다. 파일의 각 줄을 읽고 원하는 구조를 점진적으로 빌드하는 'for' 루프로 시작하는 것이 좋습니다. 이제 시작하는 법을 알았습니다! – martineau

답변

0

첫 번째 문제는 사전에 대한 이해가 부족하다는 것입니다. 각 키는 한 번만 발생할 수 있습니다, 그래서 당신이 통역을 요구하는 경우에 당신은 당신이 놀람을 얻을 수 있습니다 준 하나의 값을 제공 :

>>> {'apple':'tree', 'apple':'bee', 'apple':'go'} 
{'apple': 'go'} 

문제는 키와 관련된에만있을 수있는 하나 개의 값입니다 'apple'.

적합한 데이터 구조를 찾는 것처럼 보였으 나 StackOverflow는 문제가되는 코드를 개선하거나 수정하기위한 것입니다.

관련 문제