Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests # Библиотека запросов
- # Для установки пакета набрать в командной строке:
- # pip install beautifulsoup4
- from bs4 import BeautifulSoup # Библиотека парсинга html
- import re # Библиотека регулярных выражений
- #pip install networkx
- import networkx as nx # Библиотека построения графов
- import matplotlib.pyplot as plt
- # Сортированный вывод
- # lst - список ключей
- # minF - миниальная частота для вывода
- def sortedPrint(lst, minF = 0):
- # Считаем количество
- dic = {}
- for elem in lst:
- dic[elem] = dic.get(elem, 0) + 1
- # Сортируем по количеству
- keys = sorted(dic, key = dic.get, reverse = True)
- # Выводим
- for key in keys:
- if dic[key] > minF:
- print(key, ": ", dic[key], ";")
- # url = input("Введите url: ") # Ввод ссылки
- # Для тестировани захардкоженная ссылка
- url = "https://kino.mail.ru/news/50032_zvezdi_mstitelei_sdelali_odinakovie_tatu_v_chest_filma/?from=mr_news"
- tags = ["p", "h1", "h2"] # Теги, в которых ищем текст
- text = "" # Сам текст
- try:
- req = requests.get(url) # Выкачиваем страницу
- html = req.text # Сохраняем её html-разметку
- data = BeautifulSoup(html, "html.parser").findAll(tags) # И сохраняем весь текст из тегов
- for tag in data:
- text += tag.get_text() + '\n'; # Сохраняем текст в отдельную строку
- except requests.exceptions.RequestException as err:
- # Если не удалось получить текст:
- print("Some error occured! Error info: ", err)
- print
- # Выведем имена собственные
- namesre = r"\b[A-ZА-Я]\w*"
- names = re.findall(namesre, text)
- print("Имена собственные: ")
- sortedPrint(names)
- print()
- ltext = text.lower()
- # Выведем повторения
- repsre = r"((\b\w+\b)[-, ]+\2)"
- reps = re.findall(repsre, ltext)
- reps = [i[0] for i in reps]
- print("Повторения: ")
- sortedPrint(reps)
- print()
- # Выведем аллитерации
- alitsre = r"((\b\w+)\w* \2\w*)"
- alits= re.findall(alitsre, ltext)
- alits = [i[0] for i in alits]
- print("Аллитерации: ")
- sortedPrint(alits)
- print()
- # Найдём словосочитания
- chunks = re.findall(r"[^\n.,!?:;1-9\\\(\)\—]+", ltext)
- pairs = {}
- cols = []
- # И сосчитаем все пары подряд идущих слов
- for words in chunks:
- words = words.split();
- for i in range(len(words) - 1):
- pair = words[i] + " " + words[i + 1]
- cols.append(pair)
- pairs[pair] = pairs.get(pair, 0) + 1
- print()
- print("Коллокации: ")
- pairskeys = sorted(pairs, key = pairs.get, reverse = True)
- for key in pairskeys:
- if pairs[key] > 2:
- print(key, ": ", pairs[key], ";")
- # Построим граф
- edges = []
- for col in cols:
- edges.append(col.split())
- graph = nx.petersen_graph()
- graph.clear()
- graph.add_edges_from(edges)
- plt.figure();
- nx.draw(graph, node_color = "y", edge_color = "b", with_labels = True)
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement