python - 使用 NLTK 在不完整的句子中查找主题

标签 python nlp nltk

我有一个产品列表,我想对其进行分类。他们将用不完整的句子来描述,例如:

“固态硬盘外壳”

“硬盘线”

“1TB 硬盘”

“500GB 硬盘,制造商翻新”

我如何使用 python 和 NLP 来获得诸如“Housing, Cable, Drive, Drive”之类的输出,或者描述哪个词正在修改哪个词的树? 提前谢谢你

最佳答案

NLP 技术处理这类文本的能力相对较弱。

换句话说:构建一个包含 NLP 流程的解决方案来实现所需的分类器是很有可能的,但增加的复杂性不一定会在开发速度或分类器精度改进方面得到返回。
如果真的坚持使用 NLP 技术,词性标记及其识别名词的能力是最明显的想法,但分块和访问 WordNet 或其他词汇来源是 NLTK 的其他合理用途。

相反,基于简单正则表达式和一些试探法(例如 NoBugs 所建议的)的临时解决方案可能是解决该问题的合适方法。当然,此类解决方案存在两个主要风险:

  • 过度拟合在构建规则时审查/考虑的文本部分
  • 如果引入过多的规则和子规则,解决方案可能会变得困惑/复杂。

对要考虑的文本的完整(或非常大的样本)运行一些简单的静态分析应该有助于指导选择一些启发式方法,并避免过度拟合问题。我非常确定与自定义词典关联的相对较少的规则应该足以生成具有适当精度以及速度/资源性能的分类器。

一些想法:

  • 计算语料库中相当大一部分中的所有单词(可能还有所有二元语法和三元语法)。此信息可以通过允许将最多的努力和最严格的规则分配给最常见的模式来驱动分类器的设计。
  • 手动引入一个简短的词典,将最流行的词与以下内容相关联:
    • 他们的 POS 功能(这里主要是二元问题:即名词与修饰语和其他非名词。
    • 他们的同义词根[如果适用]
    • 他们的类(class)[如果适用]
  • 如果该模式适用于大部分输入文本,请考虑使用文本末尾之前或第一个逗号之前的最后一个词作为类别选择的主要关键字。 如果该模式不成立,只需给第一个词和最后一个词更多的权重。
  • 考虑第一遍,其中文本被重写为最常见的二元语法,替换为字典中的单个词(甚至是人工代码词)
  • 还考虑用相应的同义词词根替换最常见的拼写错误或同义词。在输入中添加规律性有助于提高精度,还有助于使一些规则/字典中的一些条目在精度上有很大的返回。
  • 对于字典中没有的词,假设与数字混合和/或前面有数字的词是修饰词,而不是名词。假设
  • 考虑一个两层分类,将无法合理分配类别的输入放入“手动堆”以提示额外审查,从而产生额外的规则和/或字典条目。经过几次迭代后,分类器需要的改进和调整应该会越来越少。
  • 寻找不明显的特征。例如,一些语料库是由多种来源混合而成的,但其中一些来源可能包括有助于识别来源和/或可用作分类提示的特定规律。例如,某些来源可能只包含大写文本(或通常超过 50 个字符的文本,或末尾被截断的单词等)

我担心这个答案没有提供 Python/NLTK 片段作为解决方案的入门,但坦率地说,这种基于 NLTK 的简单方法充其量可能会令人失望。此外,我们应该有一个更大的输入文本样本集来指导选择合理的方法,包括那些基于 NLTK 或 NLP 技术的方法。

关于python - 使用 NLTK 在不完整的句子中查找主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841569/

相关文章:

parsing - 如何使用 nltk 或 spacy 从带括号的解析字符串中获取解析 NLP 树对象?

python - 使用 nltk pos 标记器标记单个单词而不是单词标记每个字母

python - 如何使用 Pandas 中的输入语料库/列表从列中提取所有字符串匹配项?

python - 识别文章中的实体

python - Django 会存储临时文件多长时间?

machine-learning - 下一个单词预测引擎 - 它们属于人工智能的哪个分支

python - Gensim Word2Vec 模型因增加 epoch 数而变得更糟

python - 在 Python 中,如何检查字符串是否只包含某些字符?

python - 使用特定单词在字符串中查找 n 个单词的最优雅方法

python - 在 python 中使用上下文管理器使进程超时