2014-11-07 3 views
-5

Для каждого слова, следующего за каждым словом во входном файле, мы хотим, чтобы наша программа сообщала нам, сколько раз это слово следует за ним. Если слово находится в конце входного файла, первым словом является слово, которое следует за ним.Поиск вхождения слов после определенного слова

Следующий код:

def word_cond_dictionary(): 
    File = open('input.txt','r').readline() 
    words = File.split(",") 
    dic = {} 
    for i,val in enumerate(words): 
     if val in dic: 
      if words[i+1] in dic[val]: 
       dic[val][words[i+1]] +=1 
      else: 
       dic[val][words[i+1]] = 1 
     else: 
      dic[val] = {words[0]:1} 
    print(dic) 

с входным файлом, как это:

red,blue,blue,red,red,green 

печатает следующий вывод:

{'blue': {'red': 2}, 'green': {'red': 1}, 'red': {'green': 1, 'red': 2}} 

но наш вывод должен быть:

{'blue': {'red': 1, 'blue': 1}, 'green': {'red': 1}, 'red': {'green': 1, 'red': 1, 'blue: 1}} 

ответ

0

вы можете получить все пары слов в списке легко

words = ["red","blue","red","red","blue","red","green","blue","red"] 
from collections import Counter 
print Counter(zip(words,words[1:])) 
0

Я считаю, что вы ищете, сумка модели слов.

http://en.wikipedia.org/wiki/Bag-of-words_model

дал

Получая строку со всем содержимым файла, вы можете найти индекс первого слова при рассмотрении с функцией find. Например,

text.find('red')

После того, как вы обнаружили, что индекс вы можете разметить на разделители-й с функцией split.

0

Ниже мое решение этой проблемы. У меня был очень похожий вопрос, с которым надо бороться. Он печатает правильный результат.

f = open ('example.txt').readline() 
line = f.translate(None, string.punctuation).lower().split() 

myDict = {} 

for k, val in list(enumerate(line)): 
    if k+1 < len(line): 
     if val in myDict: 
      if line[k+1] in myDict[val]: 
       myDict[val][line[k]] += 1 
      else: 
       myDict[val][line[k+1]] = 1 
     else: 
      myDict[val] = {line[k+1]:1} 
print myDict 
Смежные вопросы