1

abc ABC - - 12 V我必须从具有和之类的句子的句子中标记某些模式ab abc 1,2W。这里12 V1,2W都是带单位的值。所以我想标记为abc,ABC12 V. 对于另一种情况: ab, abc, 1,2W. 我怎样才能做到这一点 ?那么 nltk word_tokenizer 是一个选项,但我不能插入任何模式,或者我可以吗? word_tokenize(test_word)

4

1 回答 1

2

如果您的输入是可预测的,即您知道标记之间出现了哪些字符(在这种情况下,我看到一个空格和一个连字符),您可以使用正则表达式来提取您想要的内容:

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根据您的需要更新参数。

于 2020-04-18T19:03:20.997 回答