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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> найти частоту вхождения слов в текстовом файле 
:(
    Опции темы
mrgloom
Дата 5.6.2012, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



читаю
Код

a = open("tst.txt")
a.read().replace("\n", " ").split(" ")


как удалить запятые и точки и т.д.? как исключить предлоги?
и как потом найти сколько раз встречается слово в списке?

Добавлено через 11 минут и 2 секунды
нашел такой код,работает, но не совсем, то что нужно.
Код

import sys
import os
import re

if len(sys.argv)==1:
    print('no params')
    sys.exit(1)

work_file = sys.argv[1]
if os.path.isfile(work_file):
    print('file: ' + work_file)

# read file
file = open(work_file,'r')
try:
    txt = file.read()
finally:
    file.close()

# regular expressions
p = re.compile("([a-zA-Z-']+)")
res=p.findall(txt)

# create dict
lsWord = {}
for key in res:
    key = key.lower()
    if key in lsWord:
        value = lsWord[key]
        lsWord[key]=value+1
    else:
        lsWord[key]=1

# sort
sorted_keys = sorted(lsWord, key=lambda x: int(lsWord[x]), reverse=True)
file = open(work_file+'_dict.csv','a+')
try:
    for key in sorted_keys:
        s = str("{0};{1}\n").format(key,lsWord[key])
        file.write(s)
    print('res: '+work_file+'_dict.csv')
finally:
    file.close()

PM MAIL   Вверх
mrgloom
Дата 5.6.2012, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну могу заставить видеть русские слова

в начале объявил

# -*- coding: cp1251 -*-

пробовал 
p = re.compile("\w+")
p = re.compile("u'[а-яА-Я0-9-]+|[.,:;?!]+'")

Добавлено через 1 минуту и 15 секунд
так вроде заработало
re.compile("[а-яА-Я0-9-]+|[.,:;?!]+")
PM MAIL   Вверх
Backward
Дата 5.6.2012, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

import pprint
import re
import string
from collections import Counter
################################################################################

PUNCTUATION = re.compile("[\\{}]".format(
        "\\".join(c for c in string.punctuation)))
################################################################################

if "__main__" == __name__:
    word_count = Counter()
    with open("file_filter.py", "r", encoding="utf-8") as f:
        any(map(word_count.update, (PUNCTUATION.sub(" ", l).split() for l in f)))

    pprint.pprint(word_count)

Предлоги сами уберите.
PM MAIL   Вверх
mrgloom
Дата 29.10.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



использую такой вот код, а как добавить исключающие слова?
через re.compile?
Код

# -*- coding: cp1251 -*-

import sys
import os
import re

if len(sys.argv)==1:
    print('no params')
    sys.exit(1)

work_file = sys.argv[1]
if os.path.isfile(work_file):
    print('file: ' + work_file)

# read file
file = open(work_file,'r')
try:
    txt = file.read()
finally:
    file.close()

# regular expressions
#p = re.compile("([a-zA-Z-']+)")
#p = re.compile("\w+")
#p = re.compile("u'[а-яА-Я0-9-]+|[.,:;?!]+'")
p = re.compile("[а-яА-Я0-9-]+|[.,:;?!]+")
res=p.findall(txt)

# create dict
lsWord = {}
for key in res:
    key = key.lower()
    if key in lsWord:
        value = lsWord[key]
        lsWord[key]=value+1
    else:
        lsWord[key]=1

# sort
sorted_keys = sorted(lsWord, key=lambda x: int(lsWord[x]), reverse=True)
file = open(work_file+'_dict.csv','a+')
try:
    for key in sorted_keys:
        s = str("{0};{1}\n").format(key,lsWord[key])
        file.write(s)
    print('res: '+work_file+'_dict.csv')
finally:
    file.close()

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


Шустрый
*


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

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



Запятые и точки можно так к примеру убрать если не ошибаюсь

Код

text = re.sub(r"[.&,]", "", text)


Убрать предлоги можно сравнивая слова со словарем, думаю тут сам справишься, т.к. составлять словарь из предлогов, а наверное ещё и союзов с частицами и междометиями мне лень.
Есть правда куда более удобный способ - юзать pymorphy. Очень полезная библиотека для обработки текста.

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


 




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


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

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