Использование re.compile для классификации неизвестных слов в текстовом файле на основе их функций - PullRequest
0 голосов
/ 19 декабря 2018

Используя Python 3, у меня есть список из примерно 14 500 неизвестных слов, и я хочу сгруппировать их по их функциям.Я использую re.compile, пытаюсь получить 5 словарей со словами, которые соответствуют каждому критерию, и окончательный список слов, которые не соответствуют ни одному из критериев, но некоторые слова, которые должны были быть сгруппированы, уже проскальзывают.Позвольте мне привести пример:

Вот операторы re.compile, которые я использую:

import re

wordscaps = re.compile("^([A-Z]*)$")

lettersnumbers = re.compile("^([a-zA-Z][1-9])")

numbersonly=re.compile("^([^a-zA-Z][1-9]+)$")

titlecase = re.compile("^([A-Z][a-z]{1,})$")

longwords=re.compile("^([a-z]{15,})$")

Я делаю это так:

for line in testfile:
    if not line.strip():
        continue
    part=line.strip().split("\t")
    if part[1] in UNK_words:
        #print(part[1])
        unk_word_tags[part[1]]={part[2]:1}
        if wordscaps.match(part[1]):
            unk2dict[part[1]]=part[2]

        elif lettersnumbers.match(part[1]):
            unk3dict[part[1]]=part[2]  

        elif numbersonly.match(part[1]):
            unk4dict[part[1]]=part[2]

        elif titlecase.match(part[1]):
            unk5dict[part[1]]=part[2]

        elif longwords.match(part[1]):
            unk6dict[part[1]]=part[2]

        else:
            unkdict[part[1]]=part[2]

но в моем последнем unkdict я получаю такие слова, как:

'23390','4400','HS2NF5','IS1112C','vA33delta','Cbf5p','Grin2c'

Мне просто интересно, что-то не так с тем, как сформулировано мое заявление re.compile.

1 Ответ

0 голосов
/ 19 декабря 2018

Вы определили свое регулярное выражение с помощью следующей логики: what_I_dont_want, what_i_want.Это не работает, потому что сначала ожидаются символы, совпадающие с тем, что вам не нужно, а затем символы, соответствующие желаемому.Вам нужно только определить, что вы хотите, как это: (Добавить 0 к числу, я думаю)

wordscaps = re.compile("^([A-Z]*)$")

lettersnumbers = re.compile("^([a-zA-Z0-9]+)")

numbersonly=re.compile("^([0-9]+)$")

titlecase = re.compile("^([A-Z][a-z]{1,})$")

longwords=re.compile("^([a-z]{15,})$")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...