Skip to main content
 首页 » 编程设计

python之如何标记 Python 中的收缩

2025年05月04日12qq号

我有一些句子要标记化,包括标点符号。但我需要处理缩略词,以便将不是“can't”之类的词标记为“ca”和“n't”,其中拆分是撇号前的一个字符,其余缩略词拆分在像“you've”和“It's”这样的撇号处变成“you”“'ve”和“It”和“'s”。这就是我被困的地方。基本上大致相当于 NKTL 的 TreebankWord Tokenizer 的行为方式: NLTK Word Tokenization Demo

我一直在使用此处提出的一种解决方案,它无法按照我希望的方式处理收缩:

re.findall("'\w+|[\w]+|[^\s\w]", "Hello, I'm a string! Please don't kill me? It's his car.") 

我得到了这个结果:

['Hello', ',', 'I', "'m", 'a', 'string', '!', 'Please', 'don', "'t", 'kill', 'me', '?', 'It', "'s", 'his', 'car', '.']

除了应该是“do”和“n't”的“不”情况外,它能正确处理撇号。有人知道如何解决吗?

我只能使用标准库,所以在这种情况下 NLTK 不是一个选项。

请您参考如下方法:

正则表达式:

\w+(?=n't)|n't|\w+(?=')|'\w+|\w+ 

用法

match_list = re.findall(r"\w+(?=n't)|n't|\w+(?=')|'\w+|\w+","you've it's couldn't don't", re.IGNORECASE | re.DOTALL) 

匹配:

['you', "'ve", "it", "'s", 'could', "n't", "do", "n't"]