2

我有要标记的句子,包括标点符号。但是我需要处理缩略词,以便将“不能”之类的单词标记为“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 不是一个选项。

4

3 回答 3

1

正则表达式:

\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"]
于 2014-08-19T19:51:23.410 回答
0

赶上n't\w+(?=n't)之前\w+

r"'\w+|n't|\w+(?=n't)|\w+|[^\s\w]"
于 2013-03-01T08:32:44.590 回答
0

尝试:

r"[n]'[\w]+|[\w]+(?!')(?:[A-Za-mo-z](?='))?|(?<=\s)[\w](?=')|[^\s\w']"

这匹配字符后跟'更多字符,即使它能够匹配其他模式,也会首先匹配。

于 2013-01-29T05:22:44.123 回答