使用正则表达式(括号)进行分词
Tokenize by using regular expressions (parenthesis)
我有以下文字:
I don't like to eat Cici's food (it is true)
我需要将它标记为
['i', 'don't', 'like', 'to', 'eat', 'Cici's', 'food', '(', 'it', 'is', 'true', ')']
我发现以下正则表达式 (['()\w]+|\.)
拆分如下:
['i', 'don't', 'like', 'to', 'eat', 'Cici's', 'food', '(it', 'is', 'true)']
如何从令牌中取出括号并将其变成自己的令牌?
谢谢你的想法。
您应该将单数字符标记(在这种特殊情况下为括号)与表示一系列标记的字符分开:
([().]|['\w]+)
当您想使用正则表达式对字符串进行标记化,并对上下文有特殊限制时,您可以使用通常会产生更清晰输出的匹配方法(尤其是当涉及到结果列表中的空元素时)。
任何单词字符都与 \w
匹配,任何非单词字符都与 \W
匹配。如果您想将字符串标记为单词和非单词字符,您可以使用 \w+|\W+
正则表达式。但是,在您的情况下,您想要匹配可选地后跟 '
的单词字符块,然后是 1+ 个单词字符,以及任何其他非空格的单个字符。
使用
re.findall(r"\w+(?:'\w+)?|[^\w\s]", s)
此处,\w+(?:'\w+)?
匹配people
或people's
等词,[^\w\s]
匹配单词和空格字符以外的单个字符。
import re
rx = r"\w+(?:'\w+)?|[^\w\s]"
s = "I don't like to eat Cici's food (it is true)"
print(re.findall(rx, s))
另一个使用 (
和 )
进行分词的例子:
[^()\s]+|[()]
这里,[^()\s]+
匹配除(
、)
和空格以外的1个或多个符号,[()]
匹配(
或)
.
我有以下文字:
I don't like to eat Cici's food (it is true)
我需要将它标记为
['i', 'don't', 'like', 'to', 'eat', 'Cici's', 'food', '(', 'it', 'is', 'true', ')']
我发现以下正则表达式 (['()\w]+|\.)
拆分如下:
['i', 'don't', 'like', 'to', 'eat', 'Cici's', 'food', '(it', 'is', 'true)']
如何从令牌中取出括号并将其变成自己的令牌?
谢谢你的想法。
您应该将单数字符标记(在这种特殊情况下为括号)与表示一系列标记的字符分开:
([().]|['\w]+)
当您想使用正则表达式对字符串进行标记化,并对上下文有特殊限制时,您可以使用通常会产生更清晰输出的匹配方法(尤其是当涉及到结果列表中的空元素时)。
任何单词字符都与 \w
匹配,任何非单词字符都与 \W
匹配。如果您想将字符串标记为单词和非单词字符,您可以使用 \w+|\W+
正则表达式。但是,在您的情况下,您想要匹配可选地后跟 '
的单词字符块,然后是 1+ 个单词字符,以及任何其他非空格的单个字符。
使用
re.findall(r"\w+(?:'\w+)?|[^\w\s]", s)
此处,\w+(?:'\w+)?
匹配people
或people's
等词,[^\w\s]
匹配单词和空格字符以外的单个字符。
import re
rx = r"\w+(?:'\w+)?|[^\w\s]"
s = "I don't like to eat Cici's food (it is true)"
print(re.findall(rx, s))
另一个使用 (
和 )
进行分词的例子:
[^()\s]+|[()]
这里,[^()\s]+
匹配除(
、)
和空格以外的1个或多个符号,[()]
匹配(
或)
.