Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2018, 06:54   #1
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию Python, работа с файлами

Здравствуйте.
Помогите пожалуйста.
Задача:
Дан файл, содержащий текст на английском языке. Найти слово,
встречающееся только в одном предложении, или сообщить, что такого
слова нет.
Как решить?
Код:
my_file = open("inglish.txt")
my_string = my_file.read()
print("Было прочитано:")
print(my_string)
my_file.close()
РезедаМуратова вне форума Ответить с цитированием
Старый 25.09.2018, 07:24   #2
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

Поделила текст на отдельные предложения и хотела загнать в список, где каждое слово разделено, но вот в список пока не получается.
Код:
import re

with open("inglish.txt", "rb") as f:
    s = re.sub(r'\s+', ' ', f.read().decode('WINDOWS-1251'), flags=re.M)
for s in re.split(r'(?<=[.!?…]) ', s):
    print(s)
else:
    lst = s.replace('.', '').split()
    print(lst)
вывод:
Код:
The Olympic Games have their own flag and motto.
The flag is white with five circles.
The circles represent the five continents of Africa, Asia, Australia, Europe and North and South America.
The circles are black, blue, green, red and yellow.
The flag of every country in the games has at least one of these colours.
The motto of the Olympics is ‘Faster, higher, stronger’.
The most exciting moment of the opening ceremony is the lighting of the Olympic Flame, another symbol of the Olympic Games.
Runners bring a torch from the valley of Olympia in Greece.
Thousands of runners take part in the journey.
The journey starts four weeks before the opening of the Games.
At the opening ceremony, the final runner carries the torch to the stadium, and lights the new Olympic Flame.
Then there is a very big song, dance and music show.
The Olympic Flame burns until the end of the Games.
The International Olympic Committee works hard between the Games.
They choose the place for the next Olympics and new sports for them too.

[]

Process finished with exit code 0
Вложения
Тип файла: txt inglish.txt (1.0 Кб, 116 просмотров)
РезедаМуратова вне форума Ответить с цитированием
Старый 25.09.2018, 08:04   #3
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

А как сделать чтобы выводились только те которые повторяются в тексте 1 раз?
Код:
import re
import string
frequency = {}
document_text = open('inglish.txt', 'r')
text_string = document_text.read().lower()
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string)
 
for word in match_pattern:
    count = frequency.get(word,0)
    frequency[word] = count + 1
     
frequency_list = frequency.keys()
 
for words in frequency_list:
    print (words, frequency[words])
РезедаМуратова вне форума Ответить с цитированием
Старый 25.09.2018, 21:49   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Так думаю, что с помощью регулярных выражений нельзя определить сколько раз то или иное слово входит в предложение или записано в файле.
Предлагаю каждое предложение разбить на слова, создав список.
Использовать полученный список для изготовления словаря, у которого ключ - слово из строки, а значение - список номеров строк, в которых встречается это слово.
Далее несложно найти слово, которое встречается в строке или в файле один, два и более раз.
У меня часть скрипта выглядит так:
Код:
import re

n = 0             # номер строки
d = {}            # Пустой словарь
for line in open("inglish.txt", "rb"): # Для построчного чтения из файла
                                       # используем итератор 
    s = line.decode('WINDOWS-1251')    # Декодируем строку
    result = re.sub(r'[;,.‘’]', ' ', s) # Заменяем разделители пробелом
                                        # Точку и косые кавычки тоже убираем
    l = []                              # Пустой список
    l = result.split()                  # Список наполнен словами
    n = n + 1         # Номер текущей строки
    for key in l:     # для каждого слова из строки
        if key in d:  # ключ в словаре
            d[key].append(n) # добавим в список значений номер строки
        else:
            d[key] = [n]   # Новый элемент словаря
print(d)
А это часть результата:
{'The': [1, 2, 3, 4, 5, 6, 7, 10, 13, 14], 'Olympic': [1, 7, 7, 11, 13, 14], 'Games': [1, 7, 10, 13, 14], 'have': [1], 'their': [1], 'own': [1], 'flag': [1, 2, 5], 'and': [1, 3, 3, 4, 11, 12, 15], 'motto': [1, 6], 'is': [2, 6, 7, 12], 'white': [2], 'with': [2], 'five': [2, 3], 'circles': [2, 3, 4], 'represent': [3], 'the': [3, 5, 6, 7, 7, 7, 7, 8, 9, 10, 10, 11, 11, 11, 11, 11, 13, 13, 14, 15, 15], 'continents': [3], 'of': [3, 5, 5, 6, 7, 7, 7, 8, 9, 10, 13], 'Africa': [3], 'Asia': [3], 'Australia': [3], 'Europe': [3], 'North': [3], 'South': [3], 'America': [3], 'are': [4], 'black': [4], 'blue': [4], 'green': [4], 'red': [4], 'yellow': [4], 'every': [5], 'country': [5], 'in': [5, 8, 9], ...}

PS:
Можно прочитать и весь файл, заменить все разделители пробелом, получить из такой длинной строки список.
Использовать слова списка как ключи словаря, а значения - количество таких слов в файле.
Как-то так, ...

Последний раз редактировалось ViktorR; 25.09.2018 в 21:56.
ViktorR вне форума Ответить с цитированием
Старый 25.09.2018, 22:02   #5
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
import re

n = 0 # номер строки
d = {} # Пустой словарь
for line in open("inglish.txt", "rb"): # Для построчного чтения из файла
# используем итератор
s = line.decode('WINDOWS-1251') # Декодируем строку
result = re.sub(r'[;,.‘’]', ' ', s) # Заменяем разделители пробелом
# Точку и косые кавычки тоже убираем
l = [] # Пустой список
l = result.split() # Список наполнен словами
n = n + 1 # Номер текущей строки
for key in l: # для каждого слова из строки
if key in d: # ключ в словаре
d[key].append(n) # добавим в список значений номер строки
else:
d[key] = [n] # Новый элемент словаря
print(d)
результат:
Изображения
Тип файла: jpg Безымянный.jpg (68.4 Кб, 115 просмотров)
РезедаМуратова вне форума Ответить с цитированием
Старый 25.09.2018, 22:18   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Мне нечем вам помочь, поскольку у меня WinPython и я работаю с IDLE.
Собственно я удивился, когда у вас вывелся пустой список, а у меня список из слов последней строки.
С PyCharm я пока не сталкивался и его особенностей не знаю.
Возможно, что там что то с выводом ...
А что там за зелёная стрелочка слева от {'The': ... и стрелка вверх.
Возможно, что строку вывода надо развернуть.
Как-то так, ...

Последний раз редактировалось ViktorR; 25.09.2018 в 22:21.
ViktorR вне форума Ответить с цитированием
Старый 28.09.2018, 00:54   #7
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
#python 3.5.2
from collections import defaultdict


def get_sentenses(text):
    sentenses = [text]
    for splitter in ['.', '!', '?']: 
        sentenses = [subsentence for s in sentenses for subsentence in s.split(splitter) if subsentence]
    return sentenses

sentenses = get_sentenses("Hello! I am Anna. Now you ready to Anna?")

word_sets = map(lambda s: set(s.split()), sentenses)

word_counter = defaultdict(int)
for words in word_sets:
    for w in words:
        word_counter[w]+=1

uniques = [x for x in word_counter if word_counter[x]==1]

if uniques:
    print(uniques[0])
else:
    print("Not found")
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
python и работа с git polin11 Python 4 22.07.2018 16:56
Курсовая работа на Python tarzan28 Фриланс 1 08.05.2017 17:15
Лабораторная работа(очень простая) Структуры, работа с файлами yurda Фриланс 2 11.06.2016 08:44
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37