【问题标题】:How to tokenize a sentence with known biwords using nltk?如何使用 nltk 标记具有已知双词的句子?
【发布时间】:2017-03-12 04:25:17
【问题描述】:

我正在使用 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.,以下...

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

【问题讨论】:

    标签: python nltk tokenize


    【解决方案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()

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2022-09-30
      • 2012-12-15
      • 1970-01-01
      • 2013-02-10
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      相关资源
      最近更新 更多