2017-02-06 6 views
-1

Проблемы:Создать индекс документа слова позиция

Я хочу, чтобы выполнить индексирование пути создания структуры данных в Python, который будет хранить все слова из заданного текстового файла, а также будет хранить свои номера строк (все строки, в которых эти слова появляются), а также положение слова (столбец #) в этой конкретной строке.

До сих пор я мог хранить слова в словаре, добавляя все номера строк в списке, но я не могу сохранить их позиции в этой конкретной строке.

Мне нужна эта структура данных для более быстрого поиска текстовых файлов.

Вот мой код до сих пор:

from collections import defaultdict 
thetextfile = open('file.txt','r') 
thetextfile = thetextfile.read() 
file_s = thetextfile.split("\n") 
wordlist = defaultdict(list) 
lineNumber = 0 
for (i,line) in enumerate(file_s): 

    lineNumber = i 
    for word in line.split(" "): 
     wordlist[word].append(lineNumber) 

print(wordlist) 
+0

что формат ваш текстовый файл? – Leonid

+0

@Leonid, он может быть любого формата. –

+0

@EdwinvanMierlo, я новичок на python, я не могу продолжать хорошо. –

ответ

0

Вот код, чтобы сохранить номера строк и столбцов слов в текстовом документе:

from collections import defaultdict, namedtuple 

# build a named tuple for the word locations 
Location = namedtuple('Location', 'line col') 

# dict keyd by word in document 
word_locations = defaultdict(list) 

# go through each line in the document 
for line_num, line in enumerate(open('my_words.txt', 'r').readlines()): 
    column = -1 
    prev_col = 0 

    # process the line, one word at a time 
    while True: 
     if prev_col < column: 
      word = line[prev_col:column] 
      word_locations[word].append(Location(line_num, prev_col)) 
     prev_col = column+1 

     # find the next space 
     column = line.find(' ', prev_col) 

     # check for more spaces on the line 
     if column == -1: 

      # there are no more spaces on the line, store the last word 
      word = line[prev_col:column] 
      word_locations[word].append(Location(line_num, prev_col)) 

      # go onto the next line 
      break 

print(word_locations)