标记文本,但将复合连字符的单词放在一起
Tokenize text but keep compund hyphenated words together
我正在尝试使用预处理功能清理文本。我想删除所有非字母字符,例如标点符号和数字,但我想保留使用破折号而不拆分它们的复合词(例如预投标、预施工)。
def preprocess(text):
#remove punctuation
text = re.sub('\b[A-Za-z]+(?:-+[A-Za-z]+)+\b', '-', text)
text = re.sub('[^a-zA-Z]', ' ', text)
text = text.split()
text = " ".join(text)
return text
比如原文:
"Attended pre-tender meetings"
应该拆分成
['attended', 'pre-tender', 'meeting']
而不是
['attended', 'pre', 'tender', 'meeting']
如有任何帮助,我们将不胜感激!
要删除除字母之间的 -
之外的所有 non-alpha 个字符,您可以使用
[\W\d_](?<![^\W\d_]-(?=[^\W\d_]))
仅等效于 ASCII:
[^A-Za-z](?<![A-Za-z]-(?=[A-Za-z]))
参见regex demo。 详情:
[\W\d_]
- 任意 non-letter
(?<![^\W\d_]-(?=[^\W\d_]))
- 如果有一个字母和一个 -
紧接着在左边,并且在 -
之后有任何字母(选中(?=[^\W\d_])
正面前瞻)。
参见Python demo:
import re
def preprocess(text):
#remove all non-alpha characters but - between letters
text = re.sub(r'[\W\d_](?<![^\W\d_]-(?=[^\W\d_]))', r' ', text)
return " ".join(text.split())
print(preprocess("Attended pre-tender, etc meetings."))
# => Attended pre-tender etc meetings
string 模块有常量字符串 punctuation 和 digits.
但是,连字符被视为标点符号。因此,如果没有 RE 的帮助,你可以这样做:
from string import punctuation, digits
s = 'Attended pre-tender meetings'
t = s.strip(punctuation.replace('-', '')+digits).split()
print(t)
输出:
['Attended', 'pre-tender', 'meetings']
我正在尝试使用预处理功能清理文本。我想删除所有非字母字符,例如标点符号和数字,但我想保留使用破折号而不拆分它们的复合词(例如预投标、预施工)。
def preprocess(text):
#remove punctuation
text = re.sub('\b[A-Za-z]+(?:-+[A-Za-z]+)+\b', '-', text)
text = re.sub('[^a-zA-Z]', ' ', text)
text = text.split()
text = " ".join(text)
return text
比如原文:
"Attended pre-tender meetings"
应该拆分成
['attended', 'pre-tender', 'meeting']
而不是
['attended', 'pre', 'tender', 'meeting']
如有任何帮助,我们将不胜感激!
要删除除字母之间的 -
之外的所有 non-alpha 个字符,您可以使用
[\W\d_](?<![^\W\d_]-(?=[^\W\d_]))
仅等效于 ASCII:
[^A-Za-z](?<![A-Za-z]-(?=[A-Za-z]))
参见regex demo。 详情:
[\W\d_]
- 任意 non-letter(?<![^\W\d_]-(?=[^\W\d_]))
- 如果有一个字母和一个-
紧接着在左边,并且在-
之后有任何字母(选中(?=[^\W\d_])
正面前瞻)。
参见Python demo:
import re
def preprocess(text):
#remove all non-alpha characters but - between letters
text = re.sub(r'[\W\d_](?<![^\W\d_]-(?=[^\W\d_]))', r' ', text)
return " ".join(text.split())
print(preprocess("Attended pre-tender, etc meetings."))
# => Attended pre-tender etc meetings
string 模块有常量字符串 punctuation 和 digits.
但是,连字符被视为标点符号。因此,如果没有 RE 的帮助,你可以这样做:
from string import punctuation, digits
s = 'Attended pre-tender meetings'
t = s.strip(punctuation.replace('-', '')+digits).split()
print(t)
输出:
['Attended', 'pre-tender', 'meetings']