如何使用 nltk 标记带有已知双词的句子?
How to tokenize a sentence with known biwords using nltk?
我正在使用 python 执行文本分析任务。在这里,我将 NLTK 用于文本处理任务。我有一组预定义的 biwords,如下所述。
arr = ['Animo Text Analytics Inc.', 'Amila Iddamalgoda']
还有我下面的一句话
sentence = "Amila Iddamalgoda is currently working for Animo Text Analytics Inc. and currently following the Text Mining and Analytics course provided by coursera."
现在我用 NLTK 标记了它。
tokenizer = RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize(sentence)
这给出了单个单词标记(很明显)。但是,我需要的是匹配我拥有的预定义双词集(在开头提到)并将该双词短语作为单个标记。
例如:Amila Iddamalgoda,目前在 Animo Text Analytics Inc. 工作,以下,...
我怎样才能做到这一点?请帮帮我
将文本中每次出现的多词中的所有 space 替换为一些清晰可辨的字符,例如下划线:
for expr in arr:
sentence = re.sub(expr, re.sub(r'\s+', "_", expr), sentence)
#'Amila_Iddamalgoda is currently working ...'
您现在可以进行 "normal" 标记化。
如果您怀疑文本中的单词之间存在多个 space,请首先创建与您的多个单词相匹配的正则表达式列表:
toreplace = {r'\s+'.join(a.split()) : '_'.join(a.split()) for a in arr}
#{'Amila\s+Iddamalgoda': 'Amila_Iddamalgoda',
# 'Animo\s+Text\s+Analytics\s+Inc.': 'Animo_Text_Analytics_Inc.'}
现在,将每个替换模式应用于原始句子:
for pattern in toreplace:
sentence = re.sub(pattern, toreplace[pattern], sentence)
现在,您可以再次进行 "normal" 标记化。
提议的解决方案效率很低。如果效率很重要,您可以编写自己的正则分词表达式并使用 nltk.regexp_tokenize()
.
我正在使用 python 执行文本分析任务。在这里,我将 NLTK 用于文本处理任务。我有一组预定义的 biwords,如下所述。
arr = ['Animo Text Analytics Inc.', 'Amila Iddamalgoda']
还有我下面的一句话
sentence = "Amila Iddamalgoda is currently working for Animo Text Analytics Inc. and currently following the Text Mining and Analytics course provided by coursera."
现在我用 NLTK 标记了它。
tokenizer = RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize(sentence)
这给出了单个单词标记(很明显)。但是,我需要的是匹配我拥有的预定义双词集(在开头提到)并将该双词短语作为单个标记。
例如:Amila Iddamalgoda,目前在 Animo Text Analytics Inc. 工作,以下,...
我怎样才能做到这一点?请帮帮我
将文本中每次出现的多词中的所有 space 替换为一些清晰可辨的字符,例如下划线:
for expr in arr:
sentence = re.sub(expr, re.sub(r'\s+', "_", expr), sentence)
#'Amila_Iddamalgoda is currently working ...'
您现在可以进行 "normal" 标记化。
如果您怀疑文本中的单词之间存在多个 space,请首先创建与您的多个单词相匹配的正则表达式列表:
toreplace = {r'\s+'.join(a.split()) : '_'.join(a.split()) for a in arr}
#{'Amila\s+Iddamalgoda': 'Amila_Iddamalgoda',
# 'Animo\s+Text\s+Analytics\s+Inc.': 'Animo_Text_Analytics_Inc.'}
现在,将每个替换模式应用于原始句子:
for pattern in toreplace:
sentence = re.sub(pattern, toreplace[pattern], sentence)
现在,您可以再次进行 "normal" 标记化。
提议的解决方案效率很低。如果效率很重要,您可以编写自己的正则分词表达式并使用 nltk.regexp_tokenize()
.