Токенизация на основе определенного паттерна с Python - PullRequest
1 голос
/ 18 апреля 2020

Я должен токенизировать определенные шаблоны из предложений, имеющих предложения вроде abc ABC - - 12 V и ab abc 1,2W. Здесь и 12 V, и 1,2W являются значениями в единицах. Поэтому я хочу использовать токены как abc, ABC и 12 V. Для другого случая: ab, abc, 1,2W. Как я могу это сделать ? Ну nltk word_tokenizer это вариант, но я не могу вставить любой шаблон, или я могу? word_tokenize(test_word)

1 Ответ

2 голосов
/ 18 апреля 2020

Если ваш ввод предсказуемый, в том смысле, что вы знаете, какие символы появляются между вашими токенами (в данном случае я вижу пробел и дефис), вы можете использовать регулярное выражение для извлечения того, что вы хотите:

import re

def is_float(s):
    return re.match(r'^-?\d+(?:\.|,\d+)?$', s) 

def extract_tokens(phrase, noise="-"):
    phrase_list = re.split("\s+", re.sub(noise, " ", phrase).strip())
    phrase_tokenized = []
    i, n = 0, len(phrase_list)
    while i < n:
        phrase_tokenized.append(phrase_list[i])
        if phrase_list[i].isdigit() or is_float(phrase_list[i]) and i < n-1:
            phrase_tokenized[-1] += " " + phrase_list[i+1]
            i += 1
        i += 1
    return phrase_tokenized

Образец теста:

>>> extract_tokens("abc ABC - - 12 V")
['abc', 'ABC', '12 V']
>>> extract_tokens("ab abc 1,2W")
['ab', 'abc', '1,2W']

А чтобы «вставить шаблон», все, что вам нужно сделать, это обновить параметр noise в соответствии с тем, что вы хотите.

...