Модераторы: pythonwin, Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закон Ципфа 
:(
    Опции темы
Anriuser
Дата 19.12.2016, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Добрый вечер. Вообщем есть реализирован первый который строит гистограму по словам в тексте.
"Измерим количество вхождений каждого слова в текст и возьмем только одно значение из каждой группы, имеющей одинаковую частоту. Расположим частоты по мере их убывания и пронумеруем, порядковый номер частоты назовем рангом частоты Выделение ключевых слов в текстовых документах ранг слова Выделение ключевых слов в текстовых документах). Наиболее часто встречающиеся слова будут иметь ранг 1, следующие за ними – 2 и так далее"
Первое это проблема с кодировкой: На графике легенда отображается неправильно. 
Если я удалю эти строки
reload(sys)  
sys.setdefaultencoding('Cp1252')
Выдается ошибка при построении на русском и украинском языке. Нужно сделать тчоб график на любом языке нормально рисовался.
Второе: Нужно построить второй график, отложив по оси абсцисс частоту вхождения слова, а по оси ординат – количество слов в данной частоте. 
Проект прикрепил

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  ZipfTest.rar 1,60 Kb
PM MAIL   Вверх
Anriuser
Дата 20.12.2016, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Спасибо что скачали хоть глянуть. Если есть вопросы по самом законе то напишите
PM MAIL   Вверх
Anriuser
Дата 20.12.2016, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Ато  у меня там в реферате все пишет

Это сообщение отредактировал(а) Anriuser - 20.12.2016, 00:14
PM MAIL   Вверх
baldman88
Дата 20.12.2016, 22:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 18.1.2009

Репутация: 2
Всего: 7



Какая ОС? Для работы с не ASCII символами лучше использовать UTF-8 (в Windows проще всего сохранять в чем-то вроде Notepad++, и выставлять кодировку в UTF-8).
Вот так, вроде, работает (если кириллический текст сохранен в UTF-8):
Код
#!/usr/bin/python

# -*- coding: utf-8 -*-

import numpy as np
import string
from operator import itemgetter
import matplotlib.pyplot as plt
import codecs
from matplotlib import rc

font = {'family': 'Arial',
        'weight': 'normal'}
rc('font', **font)


my_dictionary = dict([])
sorted_dictionary = dict([])


textfile = '/home/baldman/downloads/up.txt'
f = codecs.open(textfile, encoding='utf-8').read()
words = f.split()

for w in words:
    w = ''.join(ch for ch in w if ch not in string.punctuation)
    w = w.lower()
    
    if w in my_dictionary:
        my_dictionary[w] += 1
    else:
        my_dictionary[w] = 1

print
print "Dictionary size = ", len(my_dictionary) 
print

sorted_dictionary = sorted(my_dictionary.items(), key=itemgetter(1), reverse=True)
    
max_count = 50
for w, c in sorted_dictionary[0 : max_count]:
    print "%s\t\t: %d" % (w, c)
hist_words = [x[0] for x in sorted_dictionary]
hist_count = [x[1] for x in sorted_dictionary]
plt.figure()
X = np.linspace(1, max_count, max_count)
plt.bar(X, hist_count[0 : max_count], align='center', width=0.5)
plt.xticks(X, hist_words[0 : max_count], rotation='vertical')
plt.yticks(np.linspace(0, max(hist_count) + 1, max(hist_count) + 2))
plt.grid(True)
plt.ylim(0, max(hist_count) + 1)
plt.xlim(0, max_count + 1)
plt.tight_layout()
plt.show()

# Log-log plot of all words
plt.figure()
Y = np.arange(1, len(my_dictionary) + 1)
plt.plot(np.log(Y), np.log(hist_count))
plt.show()
Со шрифтом можно поиграться. Использовал первый, пришедший в голову из набора Windows.
И да, я там немного поменял диапазон для Y (начинается с 1, а не с 0), так как взятие логарифма от 0 плохая идея.
По второму пункту я ничего не понял.

Добавлено @ 22:16
Пы.Сы.: Сам когда-то помучался делая изображения для презентаци на защиту диплома с подписями на кириллице (нормоконтроль потребовал   smile  ).

Это сообщение отредактировал(а) baldman88 - 21.12.2016, 13:50
PM MAIL   Вверх
Anriuser
Дата 24.12.2016, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Спачибо большое вам, сейчас проверю думал уже никто не поможет)
PM MAIL   Вверх
Anriuser
Дата 24.12.2016, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Ну второй я вроде сам уже доделал

Это сообщение отредактировал(а) Anriuser - 24.12.2016, 17:09
PM MAIL   Вверх
Anriuser
Дата 24.12.2016, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Я в пайтоне 3.5.2 вообщем ошибка там  file = builtins.open(filename, mode, buffering)
PermissionError: [Errno 13] Permission denied: 'C:/Users/User/Desktop/zipf'
PM MAIL   Вверх
Anriuser
Дата 24.12.2016, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Я в пайтоне 3.5.2 вообщем ошибка там  file = builtins.open(filename, mode, buffering)
PermissionError: [Errno 13] Permission denied: 'C:/Users/User/Desktop/zipf'
PM MAIL   Вверх
Anriuser
Дата 24.12.2016, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



Заработало, пайтон 2.7 юзаю, сам незнаю что было вам большое спасибо за решение. Со вторым я уже сам поекспериментирую
PM MAIL   Вверх
baldman88
Дата 24.12.2016, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 18.1.2009

Репутация: 2
Всего: 7



Кстати, в моем коде не учтен один момент: если в тексте есть дефисы и тире, то после сравнения с string.punctuation в my_dictionary будут добавляться пустые строки. Лучше переделать так:
Код

...
for w in words:
    w = ''.join(ch for ch in w if ch not in string.punctuation)
    w = w.lower()

    if len(w) > 0:
        if w in my_dictionary:
            my_dictionary[w] += 1
        else:
            my_dictionary[w] = 1
...

PM MAIL   Вверх
Anriuser
Дата 25.12.2016, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.7.2014

Репутация: нет
Всего: нет



щяс сделаем спасибо

Добавлено через 31 секунду
baldman88, как тут чтоли лайк вам поставить ?))) Ато я тут недавно )
PM MAIL   Вверх
baldman88
Дата 25.12.2016, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 18.1.2009

Репутация: 2
Всего: 7



Большого человеческого спасибо вполне достаточно. Просто тоже старайтесь помогать другим, по возможности smile 
PM MAIL   Вверх
Google
  Дата 24.5.2019, 19:53 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0836 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.