2013-08-17 2 views
1

Мне нужно сделать программу в python, которая просматривает данный файл. Скажем, acronyms.txt, а затем возвращает процентное значение того, сколько строк содержит как минимум 1 аббревиатуру из трех букв. Например:Подсчитайте аббревиатуры трех букв в строке с помощью Regex Python

NSW is a very large state. 
It's bigger than TAS. 
but WA is the biggest! 

После прочтения этого он должен вернуть 66,7%, так как 66,7% строк содержит три письма аббревиатуры. Он также округляется до первого десятичного знака, как вы можете видеть. Я не очень хорошо знаком с регулярным выражением, но я думаю, что это было бы проще с регулярным выражением.

EDIT:

я закончил код, но мне это нужно признать аббревиатуры с точками между ними, EG N.S.W должны быть признаны в качестве аббревиатуры. Как мне это сделать?

Любая помощь будет оценена!

ответ

2

Вы можете сделать что-то вроде:

total_lines = 0 
matched_lines = 0 
for line in open("filename"): 
    total_lines += 1 
    matched_lines += bool(re.search(r"\b[A-Z]{3}\b", line)) 
print "%f%%" % (float(matched_lines)/total_lines * 100) 

Примечания «\ Ъ» в шаблоне поиска - это соответствует пустой строке в начале или в конце слова. Это помогает предотвратить нежелательные совпадения с аббревиатурами более 3 («asdf ASDF asdf») или с аббревиатурами внутри слова («asdfASDasdf»).

+0

Мне нравится выше, но как я могу заставить его содержать знаки препинания? Как и в этом, мне нужно, чтобы он соответствовал N.S.W как акроним. Как мне это сделать? – NoviceProgrammer

+0

@ пользователь2655778, использование другой regex. Что-то вроде r "\ b ([A-Z] \.) {3}". – dzhioev

3

Вы можете сделать:

import re 
cnt = 0 
with open('acronyms.txt') as myfile: 
    lines = myfile.readlines() 
    length = len(lines) 
    for line in lines: 
     if re.search(r'\b[A-Z]{3}\b', line) is not None: 
      cnt += 1 

print("{:.1f}%".format(cnt/length*100)) 

r'[A-Z]{3}' соответствует три (и только три) заглавные буквы в строке. Если поиск найден, добавим счет.

Затем мы просто делаем счет, деленный на длину строк, и печатаем результат, как вы показали.

+0

Это также соответствует аббревиатуре 4, 5 и т. Д. –

+0

@EthanFurman Исправлено: – TerryA

Смежные вопросы