Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.34 KB | None | 0 0
  1. import requests # Библиотека запросов
  2. # Для установки пакета набрать в командной строке:
  3. # pip install beautifulsoup4
  4. from bs4 import BeautifulSoup # Библиотека парсинга html
  5. import re # Библиотека регулярных выражений
  6. #pip install networkx
  7. import networkx as nx # Библиотека построения графов
  8. import matplotlib.pyplot as plt
  9.  
  10. # Сортированный вывод
  11. # lst - список ключей
  12. # minF - миниальная частота для вывода
  13. def sortedPrint(lst, minF = 0):
  14.     # Считаем количество
  15.     dic = {}
  16.     for elem in lst:
  17.         dic[elem] = dic.get(elem, 0) + 1
  18.     # Сортируем по количеству
  19.     keys = sorted(dic, key = dic.get, reverse = True)
  20.     # Выводим
  21.     for key in keys:
  22.         if dic[key] > minF:
  23.             print(key, ": ", dic[key], ";")
  24.            
  25.  
  26. # url = input("Введите url: ") # Ввод ссылки
  27. # Для тестировани захардкоженная ссылка
  28. url = "https://kino.mail.ru/news/50032_zvezdi_mstitelei_sdelali_odinakovie_tatu_v_chest_filma/?from=mr_news"
  29.  
  30. tags = ["p", "h1", "h2"] # Теги, в которых ищем текст
  31. text = "" # Сам текст
  32. try:
  33.     req = requests.get(url) # Выкачиваем страницу
  34.     html = req.text # Сохраняем её html-разметку
  35.     data = BeautifulSoup(html, "html.parser").findAll(tags) # И сохраняем весь текст из тегов
  36.     for tag in data:
  37.         text += tag.get_text() + '\n'; # Сохраняем текст в отдельную строку
  38. except requests.exceptions.RequestException as err:
  39.     # Если не удалось получить текст:
  40.     print("Some error occured! Error info: ", err)
  41. print
  42.  
  43. # Выведем имена собственные
  44. namesre = r"\b[A-ZА-Я]\w*"
  45. names = re.findall(namesre, text)
  46. print("Имена собственные: ")
  47. sortedPrint(names)
  48. print()
  49.  
  50. ltext = text.lower()
  51. # Выведем повторения
  52. repsre = r"((\b\w+\b)[-, ]+\2)"
  53. reps = re.findall(repsre, ltext)
  54. reps = [i[0] for i in reps]
  55. print("Повторения: ")
  56. sortedPrint(reps)
  57. print()
  58.  
  59. # Выведем аллитерации
  60. alitsre = r"((\b\w+)\w* \2\w*)"
  61. alits= re.findall(alitsre, ltext)
  62. alits = [i[0] for i in alits]
  63. print("Аллитерации: ")
  64. sortedPrint(alits)
  65. print()
  66.  
  67. # Найдём словосочитания
  68. chunks = re.findall(r"[^\n.,!?:;1-9\\\(\)\—]+", ltext)
  69. pairs = {}
  70. cols = []
  71. # И сосчитаем все пары подряд идущих слов
  72. for words in chunks:
  73.     words = words.split();
  74.     for i in range(len(words) - 1):
  75.         pair = words[i] + " " + words[i + 1]
  76.         cols.append(pair)
  77.         pairs[pair] = pairs.get(pair, 0) + 1
  78. print()
  79. print("Коллокации: ")
  80. pairskeys = sorted(pairs, key = pairs.get, reverse = True)
  81. for key in pairskeys:
  82.     if pairs[key] > 2:
  83.         print(key, ": ", pairs[key], ";")
  84.  
  85. # Построим граф
  86. edges = []
  87. for col in cols:
  88.     edges.append(col.split())
  89.  
  90. graph = nx.petersen_graph()
  91. graph.clear()
  92. graph.add_edges_from(edges)
  93. plt.figure();
  94. nx.draw(graph, node_color = "y", edge_color = "b", with_labels = True)
  95. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement