Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 5, 2013 21:31:32

Kato
Зарегистрирован: 2012-11-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные выражения

Всем доброго времени суток!
Недавно начали проходить регулярные выражения, задали написать программу, которая распечатывала бы все формы глагола. Не могли бы вы подсказать, как короче\разумнее записать вот это(формы глагола “сидеть”):

p = re.search(u'^си(д|ж)(ел(а|о|и)|и(м|т(е|ь?ся)|ят|шь)(я(щ(ий|ая|е(му|го))|евш(ий|его|ему|им|ем|ие|их|им(и)$)
не совсем понял, где тут можно использовать . и
Заранее благодарен за объяснения.

Отредактировано Kato (Фев. 5, 2013 21:35:20)

Офлайн

#2 Фев. 6, 2013 01:53:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

регулярные выражения

вообще, если прямо так и надо записывать, то есть многословная форма регулярного выражения, в которой можно комментарии писать

а вообще, нужно составить грамматику, а потом пользоваться ей как схемой



Офлайн

#3 Фев. 10, 2013 22:30:36

Kato
Зарегистрирован: 2012-11-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные выражения

Не могли бы Вы, пожалуйста, еще просмотреть вот это? задача в том, чтобы программа искала данные слова и выдавала, чего в тексте больше- данного слова мужского рода либо во множественном числе.

import codecs, re
words = []
m = 0
pl = 0
f = codecs.open(u'text.txt','r','utf-8')
for line in f:
    for word in line.split():
        word = word.lower()
        word = word.strip(u'.,:;-()?!')
        words.append(word)
f.close
for i in range(len(words)):
    m = re.search(u'как(о(й|го|му|е))|(ая|ую)|и(е|х|[ми]*)',words[i])
    if m != None:
        if m == m.group(2):
            m += 1
        if m == m.group(3):
            pl += 1
if f > pl:
    print 'muzhskogo roda > '
else:
    print 'mnozhestvennogo chisla > '

Отредактировано Kato (Фев. 10, 2013 22:33:15)

Офлайн

#4 Фев. 11, 2013 02:40:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

регулярные выражения

Kato
if m == m.group(2):
неправильно, объект-совпадение сравнивается с объектом-строкой

>>> import re
>>> m = re.search(r'.(.)', 'abc')
>>> m
<_sre.SRE_Match object at 0xb77e6120>
>>> m.group(1)
'b'
>>> type(m)
<type '_sre.SRE_Match'>
>>> type(m.group(1))
<type 'str'>
>>>

Kato
if f > pl:
объект-файл сравнивается с объектом-числом

>>> f = open('/etc/passwd')
>>> n = 0
>>> f
<open file '/etc/passwd', mode 'r' at 0xb788ade0>
>>> n
0
>>> type(f)
<type 'file'>
>>> type(n)
<type 'int'>
>>>

из-за синтаксической ошибки в регулярном выражении вместо слова “каких” будет искаться слово “ая”
третья группа якобы совпадает со множественным числом

логически программа тоже неправильно построена:
“какое” считается мужским родом
“какой” может быть не только мужского, но и женского рода
“какиии” считается валидным словом множественного числа



Отредактировано py.user.next (Фев. 11, 2013 03:05:19)

Офлайн

#5 Фев. 14, 2013 12:07:08

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

регулярные выражения

используйте например стеммер Постера



Офлайн

#6 Фев. 19, 2013 21:38:54

Kato
Зарегистрирован: 2012-11-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные выражения

спасибо!

если не сложно, не могли бы вы взглянуть на такое вот задание:
нужно открыть html страницу из вики (посвященную какому-либо языку) и записать оттуда языковой код этого языка ( он там в таблице после ISO/DIS 639-2 указан). получилось что-то типа

import codecs, re
f = codecs.open(u'nya.html', 'r', 'utf-8-sig')
html = f.read()
f.close()
m = re.search(u'639-2</a>:</td><td style="background-color:white">(.{3})</td>', html)
if m != None:
    codes = codecs.open('ya.txt','w','utf-8')
    codes.write(m.groups(1))
    f.close()
    print m.group(1)

Не подскажете, из за чего она может не работать?

Отредактировано Kato (Фев. 19, 2013 23:56:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version