Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > найти частоту вхождения слов в текстовом файле


Автор: mrgloom 5.6.2012, 09:05
читаю
Код

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()

Автор: mrgloom 5.6.2012, 10:04
ну могу заставить видеть русские слова

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

# -*- coding: cp1251 -*-

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

Добавлено через 1 минуту и 15 секунд
так вроде заработало
re.compile("[а-яА-Я0-9-]+|[.,:;?!]+")

Автор: Backward 5.6.2012, 10:24
Код

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)

Предлоги сами уберите.

Автор: mrgloom 29.10.2012, 11:19
использую такой вот код, а как добавить исключающие слова?
через 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()

Автор: Carlos0N 3.11.2012, 23:23
Запятые и точки можно так к примеру убрать если не ошибаюсь

Код

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


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)