Автор Тема: Ура, товарищи! Великий скрипт , о котором я так долго думал, отработал свое  (Прочитано 11074 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Я тут в процессе изучения Питона решил-таки обработать ту кучу анекдотов, что у меня накопилась(на кит.яз.). В рез-те получил 2300 файлов в UTF-8, удалив дупы - имеем 1300. Из них потом удалю те, в которых есть нечитаемый текст, и будем иметь как минимум 700-800 файлов. В дальнейшей обработке надеюсь, останутся только те, которые читаются и имеют более-менее нормальный смысл. А вообще я это делаю для такой цели - думаю на том же питоне программку написать: человек заколачивает постепенно в базу(любым способом. Я вот для этого wenlin приспособлю - первую 1000 заколочу автоматом, а потом удалю неизвестные)  те слова(или хотя бы иероглифы), которые ему знакомы, а скрипт подбирает из этой кучи текстов те, которые подходят под заданный уровень незнакомости" текста. Скажем, 3% символов, не входящих в набор известных.  А там уж кидай в каталог с текстами  и анекдоты, и сказки, и песни - скрипту без разницы 8-))))
Имхо, будет пользительная скриптовина....



Echter

  • Гость
...удалив дупы - имеем 1300. ...

   В русском языке, в отличие от польского и чешского, слово "дупа" - диалектное и жаргонное. Но вульгарное оно в любом случае. Это к вопросу о соблюдении чистоты языка...

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Цитировать
"дупа" - диалектное и жаргонное. Но вульгарное оно в любом случае.
Не знаю, не знаю. Классическое слово компьютерного сленга, калька с английского. Почему вульгарное-то? Тогда всякие "комп", "скрипт"  и проч. тоже можно так заклеймить.

Echter

  • Гость
... Почему вульгарное-то? ...

   Потому что для большинства русскоговорящих людей оно имеет значение "задница". В некоторых регионах этого слова не знают, но на западе России оно достаточно распространено. К слову, один из альбомов группы "Аукцыон", с прозаическим названием "Жопа", на пластинке имел немного видоизменённое имя "Дупло".

   Возвращаясь, собственно, к теме. Идея интересная. Мне кажется, наиболее полезен такой скрипт может оказаться преподавателям языка (неважно, какого) при поиске учебных текстов. Таким образом можно будет подбирать текст на основе уже изученных материалов.

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
   Потому что для большинства русскоговорящих людей оно имеет значение "задница".
Видимо, я в это большинство не вхожу. Отсутствие фонемы "л" было достаточным, чтобы я не проводил аналогий. ;D Дупы = dupes. That's all. Куда короче, чем "дубликаты файлов". Десятки раз видел употребленным в этом смысле без всякого подтекста。 дупы,  бэды, дуполовка, - слова фидошников, тоссеры которых создавали 2 специальные арии - DUPES и BADMESS, куда падали соотв. дупы и бэды.  ;)
Думаю, Вы преувеличиваете вульгарность этого слова.

Цитировать
   Возвращаясь, собственно, к теме. Идея интересная. Мне кажется, наиболее полезен такой скрипт может оказаться преподавателям языка (неважно, какого) при поиске учебных текстов. Таким образом можно будет подбирать текст на основе уже изученных материалов.

Точно. Для этого и делался. 8-) С поправкой на то, что я сам себе преподаватель.
Жаль только, проблема подбора текста не решаема, если текст - на родном языке.....  ;)

lekitata

  • Гость

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
а зачем он? Я думал, результат его работы более интересен. Если Вы про тот, который я собирался написать, то я это пока отложил...

Оффлайн Dirk Diggler

  • Заслуженный
  • *****
  • Сообщений: 1245
  • Карма: 10
  • Пол: Мужской
  • Skype: dirk___diggler
Вот скрипт. Не совсем то, что было в начале темы, но тем не менее.
Цитировать
#!/usr/bin/env python
# -*- coding: utf-8 -*-   

import re
import os
import shutil

# скрипт  а) читает словарь из файла как набор иероглифов
# б) для каждого файла в директории проверяет соответствие словарю.
# в) выкладывает в другую директорию 5 наиболее подходящий файлов
#

#  ——————==== здесь задаются настройки скрипта  ====—————————-
#  —————————————————————————————————————
text_dir='xian'  # это директория, где лежат файлы с текстами в кодировке UTF-8
out_dir = 'sorted'
dictionary= 'dict.txt'   # это файл-словарь.

# Пока(и, думаю, надолго) поддерживаются только слова-иероглифы, дву- и более значные
# слова скрипт не знает.




#  РАЗДЕЛ ЗАДАНИЯ ФУНКЦИЙ ПРОВЕРОК НА СООТВ СЛОВАРЮ


# Метод 1
# КОЛ-ВО СОВПАВШИХ ИЕРОГЛИФОВ ДЕЛИТСЯ НА ДЛИНУ
# ВСЕГО ТЕКСТА
def method1(text,dic):
  sootv = 0
  for j in range(0,len(text)):
    if text[j] in dic:
   sootv=sootv+1
  return float(sootv) / len(text)

# КОНЕЦ МЕТОДА 1. ВОЗВРАЩАЕТ ЗНАЧЕНИЯ СООТВ. В ВИДЕ ПЛАВАЮЩЕЙ ТОЧКИ (1.0 = стопроцентное совпадение)



# Метод 2
# КАЖДЫЙ ИЕРОГЛИФ ТЕКСТА, ИМЕЮЩИЙСЯ В СЛОВАРЕ, С КАЖДЫМ СВОИМ ПОЯВЛЕНИЕМ ВКЛАДЫВАЕТ В
# ОБЩУЮ ВЕЛИЧИНУ СООТВЕТСТВИЯ ВСЕ МЕНЬШЕ И МЕНЬШЕ. ТЕМ САМЫМ УМЕНЬШАЕТСЯ ВЛИЯНИЕ ЧАСТО
# ВСТРЕЧАЮЩИХСЯ СУФФИКСОВ, ЧАСТИЦ И ГЛАГОЛОВ-СВЯЗОК

def method2(text,dic):
  sootv = 0
  met = []
  mettimes = []
  for j in range(0,len(text)):
    if text[j] in dic:
      if text[j] not in met:
         met.append(text[j])
         mettimes.append(1)
         sootv=sootv+1.0
      else:
         mettimes[met.index(text[j])] += 1
         sootv=sootv+(1.0/(mettimes[met.index(text[j])]**2))
  return float(sootv) / len(text)

# КОНЕЦ МЕТОДА 2. ВОЗВРАЩАЕТ ЗНАЧЕНИЯ СООТВ. В ВИДЕ ПЛАВАЮЩЕЙ ТОЧКИ
# (1.0 = стопроцентное совпадение, причем ни один иероглиф текста не повторился дважды)








# СОЗДАЕМ СЛОВАРЬ
dict=unicode( (open(dictionary)).read(),'utf-8')
# ПРОВЕРКА НА ДУБЛИ В СЛОВАРЕ НЕ ДЕЛАЕТСЯ ПОКА ЗА НЕНАДОБНОСТЬЮ





# ЧИТАЕМ В ЦИКЛЕ ФАЙЛЫ ИЗ ДИРЕКТОРИИ

filelist=os.listdir(text_dir)
FileListLen=len(filelist)
sootvlist = [] # range(FileListLen)
print len(filelist)


for i in range(0,FileListLen):
  cur_file= open(text_dir+"\\"+filelist)
  cur_text= unicode(cur_file.read(),'utf-8')

# ДАЛЕЕ ПРОВЕРЯЕТСЯ ТЕКСТ НА СООТВ СЛОВАРЮ -
# Методы 1,2
  sootvlist.append([method2(cur_text,dict),filelist])

sootvlist.sort()
for i in range(0,min(5,len(sootvlist))):
  fileout="sorted\\best"+str(i)+".txt"
  shutil.copyfile(text_dir+"\\"+sootvlist[len(sootvlist)-i-1][1],fileout)

Жду предлодения, пожелания....