如何使用nltk对已知双字的句子进行标记?

时间:2017-03-12 04:25:17

标签: python nltk tokenize

我正在使用python进行文本分析任务。在这里,我使用NLTK进行文本处理任务。对我来说,有一组预先定义的biwords,如下所述。

outer(names(m[,-1]), names(m[,-1]), function(x,y){colSums((m[,x]-m[,y])**2/156854,na.rm=TRUE)})

我还有一个如下句子。

arr = ['Animo Text Analytics Inc.', 'Amila Iddamalgoda']

现在我已使用NLTK对此进行了标记。

sentence = "Amila Iddamalgoda is currently working for Animo Text Analytics Inc. and currently following the Text Mining and Analytics course provided by coursera."

这给出了单字标记(显然)。但是,我需要的是匹配我所拥有的预定义双字组(在开头提到),并将双字符表达式作为单个标记。

例如:Amila Iddamalgoda,目前正在工作,Animo Text Analytics Inc.,以下,......

我怎样才能做到这一点?请帮帮我

1 个答案:

答案 0 :(得分:1)

将文本中多个单词出现的所有空格替换为一些清晰可识别的字符,例如下划线:

for expr in arr:
    sentence = re.sub(expr, re.sub(r'\s+', "_", expr), sentence)
#'Amila_Iddamalgoda is currently working ...'

您现在可以进行“正常”标记化。

如果您怀疑文本中的单词之间有多个空格,请首先创建与您的多个单词匹配的正则表达式列表:

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)

现在,再次,您可以进行“正常”标记化。

建议的解决方案效率很低。如果效率很重要,您可以编写自己的常规标记化表达式并使用nltk.regexp_tokenize()