Поиск почетного текста, а затем заглавных букв в Python

#python #file #text #analysis #capitalization

#python #файл #текст #анализ #капитализация

Вопрос:

 file = open('AllCongress.txt', "r")
lines = file.readlines()
file.close()
a = ""
b = ""
c = ""
d = ""
e = ""
f = ""
g = ""
y = ""
z = ""
for x in lines:
    if ((x == "M") or (a == "M")):
        a == "M"
        if((x == "r") or (b == "r")):
            b == "r"
            if((x == ".") or (c == ".")):
                c == "."
                if((x == " ") or (d == " ")):
                    d == " "
                    if((x == x.isupper()) or (e == "A"):
                        e == "A"
                        if((x == x.isupper()) and ((e == "A") and (f == "A"))):
                            f == "A"
                            
                            if((x == x.isupper()) or (g == g.isupper())):
                                g == "A"
  

Я пытаюсь разделить разделы .txt-файла на два отдельных файла в зависимости от того, содержит ли он говорящего мужского или женского пола. У носителей этого типа файлов их фамилия написана заглавными буквами после почетного. Таким образом, формат мужского почетного имени для выступающих в этом файле — «мистер XYZ», где XYZ — это любые 3 заглавные буквы (3 заглавных буквы подряд достаточно, чтобы определить любого в файле как говорящего). Женский формат похож, просто либо «мисс XYZ», либо «миссис XYZ».

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

К сожалению, я новичок в Python и не могу придумать способ, которым я могу проверить наличие «мистера» или «миссис», а затем, по крайней мере, 3 заглавных буквы подряд. Мне действительно просто нужен способ обнаружить это, и я, вероятно, смогу разобраться с остальным. Приведенный выше код — это действительно беспорядочный и незавершенный способ, которым я пытался захватить часть текста «Mr. XYZ».

Комментарии:

1. что вы пробовали? пожалуйста, покажите еще немного кода. Также можете ли вы показать часть этого .txt файла?

Ответ №1:

вот некоторый код (если у вас есть вопросы -> задать):

 with open('yourfile.txt') as file:
    lines = file.read()

lines = lines.split(' ')
for index, word in enumerate(lines):
    if word == 'Mr.' and lines[index   1].isupper():
        prefix = 'Mr. '
        name = lines[index   1]
        print(prefix   name)
    elif word == 'Mrs.' and lines[index   1].isupper():
        prefix = 'Mrs. '
        name = lines[index   1]
        print(prefix   name)

  

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

Комментарии:

1. Одна из проблем заключается в том, что иногда в тексте будут имена людей с префиксом Mr . , но с фамилией, которая не вся заглавная (это означает, что на них просто ссылается говорящий). У говорящего есть фамилия после префикса со всех заглавных букв, и я хочу убедиться, что я разделяю ее только на говорящего, а не на случайного мистера или миссис, которые они упоминают в тексте. (Извините, в моем примере текста это не отражено, но это будет выглядеть примерно так: «Mr. РОБЕРТС. Госпожа спикер, мистер Старк только что сказал что-то бла-бла-бла »

Ответ №2:

Используйте строковые функции, такие как startswith() или endswith() И не закрывайте файл перед чтением строк

 file = open('AllCongress.txt', "r")
lines = file.readlines()
lines = lines.split(' ')
for x in lines:
 if(x.startswith("Mr."):
  *code here*
 elif(x.startswith("Ms."):
  *code here*
  

Комментарии:

1. Единственная проблема с этим заключается в том, что иногда в тексте есть имена людей, например, мистер Робертс или что-то в этом роде, но если фамилия написана заглавными буквами, это имя говорящего, чье имя я действительно хочу использовать в тексте. В основном у меня возникают проблемы с определением того, как определить, есть ли у них оба «Mr.», а затем, по крайней мере, 3 заглавные буквы подряд (что означает, что они являются говорящим, а не просто какое-то случайное имя в тексте)