Найти - Пользователи
Полная версия: DictoBructo
Начало » Python проекты » DictoBructo
1
alekzp
Исключительно ради спортивного интереса (и не смотрите на название, пожалуйста) написал небольшой скрипт на python3. Его единственное прикладное значение заключается в поиске «синонимов» к заданному слову. А именно, скрипт собирает последние (на момент запроса) 1500 сообщении из Твиттера, в которых встречается заданное слово. Затем парсит текстовую составляющую и подсчитывает количество повторении всех слов. После, в папке со скриптом создаётся одноимённый с запросом текстовый файл.dic, в который записываются результаты, соответствующие заданным требованиям (длина синонима и количество повторении).

Например, команда

$python3 dictobructo.py Путин 5 30 

заставит скрипт искать твиты, в которых встречается слово «Путин» и выбрать из них слова, которые имеют длину не менее 5 букв и встречаются минимум 30 раз. В результате будет создан файл «путин.dic» с примерно следующим содержанием:

мирное (280)
премьер (39)
владимир (314)
нетаньяху (234)
новости (35)
насилия (36)
президент (245)
конфликте (32)
эскалации (34)
израиль (114)
призвал (466)

В скобках — количество повторении. В принципе, вещь бессмысленная, но забавная. Можно, так сказать, положить палец на пульс Для работы скрипта требуется иметь учётную запись в Твиттере и создать своё приложение (чтобы получить ключи аутентификации. Как это сделать, подробно написано, например, здесь)

Собственно, сам код.

#   ~-Open source for fun-~
#   --------------------------------------
#   DictoBructo by alekz.polyakov@gmail.com 
#   http://scriptocide.blogspot.com
#   --------------------------------------
#
#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
from twitter import *
from collections import *
import requests, re, string
 
req = str(sys.argv[1]).lower()
length = sys.argv[2]
freq = sys.argv[3]
text = []
strip = string.whitespace + string.punctuation + string.digits
 
###### авторизация #########
def authoriz():
    OAUTH_TOKEN =  "_______"  #вместо прочерков
    OAUTH_SECRET = "_______"  #вставить свои данные
    CONSUMER_KEY = "_______"
    CONSUMER_SECRET = "____"
    t = Twitter(auth=OAuth(OAUTH_TOKEN, OAUTH_SECRET,CONSUMER_KEY, CONSUMER_SECRET))
 
 
###### отправка запроса, получение,парсинг ответа и запись в файл #########
def get_n_parse():
    for num in range(1,16): #количество страниц, которое хотим получить от сервера (15 страниц — ограничение Твиттера)
        result = requests.get("http://search.twitter.com/search.json?q=%s&page=%d&rpp=100" % (req, num))
        for tweet in range(0, len(result.json['results'])):
            text.append(str(result.json['results'][tweet]['text']))
 
    words = re.findall('w+', str(text).lower().strip(strip))
    with open(req+'.dic', 'a') as f:
            for key, value in dict(Counter(words)).items():
                if (value >= int(freq)) and (len(key)>=int(length)) and (key != req) and (key != 'http'):
                    f.write(str(key)+'  ' +'(' + str(value) + ')n')
 
 
authoriz()
print('Идёт поиск синонимов для слова "',req,'" длиной ', length,' букв и которые встречаются не менее ', freq,' раз.')
get_n_parse()
print('Синонимы подобраны и записаны в файл ' + req +'.dic')
py.user.next
alekzp
words = re.findall('w+', str(text).lower().strip(strip))

str(text).lower().strip(strip)
это список преобразуется в строку, а потом в этом происходит поиск ?

alekzp
req = str(sys.argv[1]).lower()
в чём смысл приведения к str ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB