【问题标题】:Tokenizing without breaking up key phrases [closed]在不分解关键短语的情况下进行标记[关闭]
【发布时间】:2021-02-06 18:40:18
【问题描述】:

我有一串文本,例如s = 'hi, welcome to grade 3'

目前当我标记我得到的字符串时

tokens = ['hi', 'welcome', 'to', 'grade', '3']

如何在不为常用短语(例如“grade 3”)生成单独标记的情况下对字符串进行标记

我希望输出类似于

tokens = ['hi', 'welcome', 'to', 'grade 3']

我有一个常用短语列表,如果这样更简单,我想将其保留在一个标记中

最终我不想让我所有的标记都变成二元组,因为我仍然需要为程序的其他部分使用单个单词标记

【问题讨论】:

  • 有多种方法可以向 NLTK 提供短语列表。请发布预期的MRE - Minimal, Reproducible Example,显示您使用的内容,以及它如何不起作用。
  • 所以我能想到的让它工作的唯一方法是创建一个完全独立的函数,将句子标记为二元组,然后与列表进行比较。这似乎非常低效,因为我正在运行函数来标记单词,然后运行一个完全独立的函数来标记二元组。
  • 请通过intro tour、help center 和how to ask a good question 了解本网站的运作方式并帮助您改进当前和未来的问题,从而帮助您获得更好的答案。
  • “我能想到的唯一方法”只是一个开始。请参阅How much research 和Question Checklist。通过浏览器搜索可以处理特定短语的词典;我不确定哪个对你有用,因为我使用了不同的解析工具,它为“复合名词”提供了更好的工具。

标签: python nlp nltk tokenize


【解决方案1】:

此代码使用MWETokenizer。

from nltk import word_tokenize
from nltk.tokenize import MWETokenizer
tk = MWETokenizer([('grade', '3')])
tokens = tk.tokenize(word_tokenize('hi, welcome to grade 3'))
words = [val.replace('_', ' ') for val in tokens]
print(words)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2011-07-17
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多