NLP 对句子内容进行分类/标记(需要 Ruby 绑定)

2023-12-22

我正在分析几百万封电子邮件。我的目标是能够将其分组。团体可以是例如:

  • 交货问题(发货缓慢、发货前处理缓慢、库存信息不正确等)
  • 客户服务问题(电子邮件回复速度慢、回复不礼貌等)
  • 退货问题(退货请求处理缓慢、客户服务缺乏帮助等)
  • 定价投诉(发现隐藏费用等)

为了执行此分类,我需要一个可以识别词组组合的 NLP,例如:

  • “[他们|公司|公司|网站|商家]”
  • “[没有|没有|没有]”
  • “[回复|回复|回答|回复]”
  • “[第二天之前|足够快|根本]”
  • etc.

这些示例组中的一些组合应该匹配如下句子:

  • “他们没有回应”
  • “他们根本没有回应”
  • “完全没有反应”
  • “我没有收到该网站的回复”

然后将句子分类为客户服务问题.

哪个 NLP 能够处理这样的任务?根据我的阅读,这些是最相关的:

  • 斯坦福核心自然语言处理
  • OpenNLP

还检查这些建议的 NLP https://stackoverflow.com/questions/999410/natural-language-processing-in-ruby/10056667#10056667.


使用 OpenNLP doccat api,您可以创建训练数据,然后根据训练数据创建模型。与朴素贝叶斯分类器相比,它的优点是它返回一组类别的概率分布。

因此,如果您创建以下格式的文件:

customerserviceproblems They did not respond
customerserviceproblems They didn't respond 
customerserviceproblems They didn't respond at all
customerserviceproblems They did not respond at all
customerserviceproblems I received no response from the website
customerserviceproblems I did not receive response from the website

等等......提供尽可能多的样本并确保每行以 \n 换行符结尾

使用此应用程序,您可以添加任何您想要的意味着“客户服务问题”的内容,您还可以添加任何其他类别,因此您不必过于确定哪些数据属于哪些类别

这是构建模型的 java 的样子

DoccatModel model = null;
    InputStream dataIn = new FileInputStream(yourFileOfSamplesLikeAbove);
    try {

      ObjectStream<String> lineStream =  
              new PlainTextByLineStream(dataIn, "UTF-8");

      ObjectStream<DocumentSample> sampleStream = new DocumentSampleStream(lineStream);
      model = DocumentCategorizerME.train("en", sampleStream);
      OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelOutFile));
      model.serialize(modelOut);
      System.out.println("Model complete!");
    } catch (IOException e) {
      // Failed to read or parse training data, training failed
      e.printStackTrace();
    }

获得模型后,您可以像这样使用它:

DocumentCategorizerME documentCategorizerME;
  DoccatModel doccatModel; 

doccatModel = new DoccatModel(new File(pathToModelYouJustMade));
   documentCategorizerME = new DocumentCategorizerME(doccatModel);
 /**
 * returns a map of a category to a score
 * @param text
 * @return
 * @throws Exception 
 */
  private Map<String, Double> getScore(String text) throws Exception {
    Map<String, Double> scoreMap = new HashMap<>();
    double[] categorize = documentCategorizerME.categorize(text);
    int catSize = documentCategorizerME.getNumberOfCategories();
    for (int i = 0; i < catSize; i++) {
      String category = documentCategorizerME.getCategory(i);
      scoreMap.put(category, categorize[documentCategorizerME.getIndex(category)]);
    }
    return scoreMap;

  }

然后在返回的哈希图中,您拥有建模的每个类别和分数,您可以使用分数来决定输入文本属于哪个类别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NLP 对句子内容进行分类/标记(需要 Ruby 绑定) 的相关文章

随机推荐

  • 匹配点的正则表达式

    想知道最好的匹配方式是什么 test this from blah blah blah email protected cdn cgi l email protection blah blah 是 使用Python 我试过了re split
  • 如何获取Android系统颜色?

    我正在寻找获取 Android 系统颜色 设备中使用的颜色主题的方法 Using android color 我没有得到正确的颜色 例如 我的设备中的背景颜色是BLACK 菜单背景颜色为DARKGREY 值来自android color 在
  • 如何在代码中处理游标上的 IllegalStateException?

    当我调试我的应用程序时突然弹出此错误 我该如何处理这种错误 我不知道是在哪里以及如何引起的 Daemon System Thread lt 5 gt HeapWorker Suspended exception IllegalStateEx
  • Pytorch 中缺乏 L1 正则化的稀疏解决方案

    我正在尝试在简单神经网络的第一层 1 个隐藏层 上实现 L1 正则化 我查看了 StackOverflow 上的其他一些帖子 这些帖子使用 Pytorch 应用 l1 正则化来弄清楚应该如何完成 参考文献 在 PyTorch 中添加 L1
  • 使用 RSpec 进行改进的测试类

    假设我已经精炼了 module RefinedString refine String do def remove latin letters code code code code end end end 我在课堂演讲中使用它 class
  • 将所有“工作表对象”转换为 powerpoint 中的图像

    真的不知道把它放在哪个堆栈站点上 请随意将其移至正确的位置 我的问题与编程并不真正相关 但我有大量的幻灯片中嵌入了这些 工作表对象 的要点 有些似乎是来自 Excel 的图表以及来自 Visio 的其他图表类型项目 我需要将所有这些 工作表
  • Kivy 规则继承与 add_widget()

    跟进问题 Kivy 外部规则固有 https stackoverflow com questions 31618565 kivy outside rule inherence main py from kivy app import App
  • 为什么 Azure 不在我的两个实例之一上调度 HTTP 请求?

    我有一个带有两个实例的 Azure Web 角色 两个实例都 准备就绪 运行正常 在我的桌面上 同一程序的四个实例同时运行 并通过 HTTP 请求访问 Web 角色 URL 但根据日志 所有请求仅分派到实例 0 我需要将请求分派到两个实例以
  • C# 通用列表联合问题

    我正在尝试使用 Union 合并两个列表 以便消除重复项 以下是示例代码 public class SomeDetail public string SomeValue1 get set public string SomeValue2 g
  • ipython 笔记本中的居中对齐输出

    我想将我的输出 包括文本和绘图 居中对齐ipython notebook 有没有一种方法可以在同一个笔记本中添加样式 代码或屏幕截图示例会有很大帮助 尝试在代码单元中运行此命令以覆盖输出单元的默认 CSS from IPython disp
  • SharePoint 2010:RemoveFieldRef 和 Inherits="TRUE"

    我创建了一个继承自 OOTB SharePoint 的自定义内容类型Picture内容类型 我所做的唯一自定义是添加一个简单的 URL 字段 并删除基本类型上的两个字段 见下文
  • 如何根据编译器类型在 C 编译器的 SConstruct 中设置选项?

    我需要为 C 编译器设置附加选项 例如添加标志以打开所有警告 具体取决于编译器的类型 例如 对于 MSVC 我应该使用 env Append CPPFLAGS Wall 但对于 mingw gcc 我需要使用 env Append CCFL
  • Symfony2 异常响应。将 404 状态代码替换为 200

    我在 symfony2 中有一个 404 处理程序 它是一个 EventListener 对于某些 404 我会进行重定向 效果很好 对于浏览器来说 不会抛出 404 错误 new RedirectResponse newURL 该行基本上
  • 向下滚动到部分时突出显示菜单项

    我知道这个问题在这个论坛上已经被问了一百万次 但没有一篇文章帮助我找到解决方案 我编写了一小段 jquery 代码 当您向下滚动到与哈希链接中 具有相同 id 的部分时 它会突出显示哈希链接 window scroll function v
  • 通过重复数字打印所有排列的算法

    我已经成功设计了打印所有重复数字的排列的算法 但我设计的算法有一个缺陷 仅当字符串的字符唯一时它才有效 有人可以帮我扩展算法 以应对字符串的字符可能不唯一的情况 到目前为止我的代码 include
  • Passport JS successRedirect 在 Node.js 中挂起

    我正在使用护照local signup并可以通过表单创建用户并使页面成功重定向到我指定的页面 我目前的问题是 重定向后页面就会挂起 我看到其他人也有类似的经历 但看看我所拥有的 我无法弄清楚为什么我的例子挂了 我首先对表单进行一些简单的验证
  • AuditException:由于非活动事务而无法创建修订

    我一直在更新应用程序上的框架 现在我正在尝试使用 JPA 配置 hibernate envers 来审核某些域 常规持久性工作正常 但审核失败并出现以下错误 我有这个错误 org springframework orm hibernate4
  • PowerShell:ForEach-Object 与 InputObject 的意义是什么?

    The ForEach 对象的文档 https learn microsoft com en us powershell module microsoft powershell core ForEach Object说 当你使用InputO
  • R,获取城市的经度/纬度数据并将其添加到我的数据框中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想获取数据框中城市的经度 纬度数据 并在我的框架中添加 2 列 我是 R 新手 不知道该怎么做 有人可以帮我解决这个问题吗 我的框架 g
  • NLP 对句子内容进行分类/标记(需要 Ruby 绑定)

    我正在分析几百万封电子邮件 我的目标是能够将其分组 团体可以是例如 交货问题 发货缓慢 发货前处理缓慢 库存信息不正确等 客户服务问题 电子邮件回复速度慢 回复不礼貌等 退货问题 退货请求处理缓慢 客户服务缺乏帮助等 定价投诉 发现隐藏费用