Управление текстовыми файлами при поиске ключевых слов - PullRequest
0 голосов
/ 05 мая 2019

Я работал над программой, которая находит слова, которые появляются в тексте только один раз.Однако, когда программа находит слово, я хочу, чтобы оно давало некоторый контекст вокруг этого слова.

Вот мой код.

from collections import Counter
from string import punctuation

text = str("bible.txt")
with open(text) as f:
     word_counts = Counter(word.strip(punctuation) for line in f for word in 
line.split())

unique = [word.lower() for word, count in word_counts.items() if count == 1]

with open(text, 'r') as myfile:
    wordlist = myfile.read().lower()

print(unique)
print(len(unique), " unique words found.")

for word in unique:
    first = 1
    second = 1
    index = wordlist.index(word)
    if wordlist[index - first:index] is not int():
        first += 1
    if wordlist[index:index + second] is not ".":
        second += 1
    print(" ")

    first_part = wordlist[index - first:index]
    second_part = wordlist[index:index + second]
    print(word)
    print("%s %s" % ("".join(first_part), "".join(second_part)))

Где это - это вводtext.

В идеале это будет показывать

sojournings
1 Jacob lived in the land of his father's sojournings, in the land of 
Canaan.

generations
2 These are the generations of Jacob.

По сути, я хочу, чтобы оно показывало предложение, в котором находится это слово, с номером стиха в начале.Я знаю, что что-то сделаю с индексом, но, честно говоря, я не знаю, как это сделать.

Любая помощь будет принята с благодарностью.

Спасибо, Бен

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Я просто оставлю здесь готовый код для тех, кто сталкивается с этим в будущем.

from collections import Counter
from string import punctuation
import time

path = input("Path to file: ")
with open(path) as f:
    word_counts = Counter(word.strip(punctuation) for line in f for word in line.split())

wordlist = open(path).read().replace('\n', '')

unique = [word for word, count in word_counts.items() if count == 1]

print(unique)
print(len(unique), " unique words found.")

for word in unique:
    print(" ")
    word_posn = wordlist.find(word)
    start_posn = wordlist[:word_posn].rfind("." or "," or "!" or "?")) + 1
    end_posn = wordlist[word_posn:].find("." or "," or "!" or "?")) + word_posn + 1
    print(word)
    print(wordlist[start_posn:end_posn])

Также кричите @lb_so за помощь!

1 голос
/ 05 мая 2019

Я бы извлек индекс первой буквы выбранного слова (во всей строке, которая для Библии будет длинной; '), а затем нашел бы первое "."предшествующий этому письму.Я также нашел бы «следующий» «.», Но установив минимальную длину, возможно, для обеспечения контекста в небольших предложениях.Это дает вам диапазон для включения / печати / отображения.

def stringer():

    mystring = """ the quick brown fox. Which jumped over the lazy dog and died a horrible death. ad ipsum valorem"""

    word_posn = mystring.find("lazy")
    start_posn = mystring[:word_posn].rfind(".") + 1
    end_posn = mystring[word_posn:].find(".")+word_posn +1

    return '"' + mystring[start_posn:end_posn].strip() + '"'

Это было закодировано очень быстро, поэтому извиняюсь за ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...