#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 заглавные буквы подряд (что означает, что они являются говорящим, а не просто какое-то случайное имя в тексте)