【问题标题】:How to extract information from a text with supervised classification?如何从有监督分类的文本中提取信息?
【发布时间】:2017-07-10 20:21:22
【问题描述】:

我尽量让我的问题更清楚,如果我使用了不正确的术语,我深表歉意。

我有N个如下形式的文本文档

“最好的数字是 200,因为 [...]”

“我喜欢 250 多于 120 [...]”

“[...]300 是我最喜欢的数字”

“没有什么比 450[...] 更好的了” 等等

鉴于这份新文件:

"顶部的顶部是 125[...]"

如何提取信息“125”?

我使用正则表达式对文本进行预处理,以将文档的维度从 50 页减少到 2-5 个句子。我不对文本做任何其他操作

请注意,Regexp 应该不是很有用,因为很难找到常规模式,而且我必须处理许多不同类型的信息(不仅仅是数字!)

我认为机器学习方法会很有用,因此我为我的 N 个文档分配了一个值(即“200”、“250”、“300”、“450”),并尝试预测使用 RTextTools 包中的 SVM、MAXENT 算法的“125”,但结果不佳。

我的机器学习方法是否正确?如何改进我的信息提取方法?

谢谢

【问题讨论】:

  • 嗨!您对文本执行什么样的预处理?你把它分成字符还是单词?无论如何,您是否对源文本字符串进行标记?通常,您将其用作 ML 算法的输入 - 因为作为单个字符串的原始文本根本不起作用。请包括它以及一些具体的例子。
  • 请阅读help center
  • 我修改了指定示例并添加了有关文本预处理的信息
  • 对不起,为什么不能使用只捕获数字的正则表达式?我觉得我误会了什么。
  • 如果我理解正确,您想从每个文档中提取数字。正则表达式是这样做的方法。您可以尝试使用rebus 包,因为它提供了更易于阅读的代码。

标签: r machine-learning text-mining prediction information-extraction


【解决方案1】:

假设你有一个向量vec定义如下:

vec <- c("The best number is 200 because [...]",
          "I like 250 more than 120 [...]",
          "[...]300 is my favourite number",
          "Nothing is better than 450[...]",
          "The top of the tops is 125[...]")

您可以使用stringr 包中的str_extract_all 提取所有整数,并从rebus 包中构建正则表达式:

library(rebus)
library(stringr)
str_extract_all(vec, pattern = one_or_more(DGT), simplify = TRUE)
#      [,1]  [,2] 
# [1,] "200" ""   
# [2,] "250" "120"
# [3,] "300" ""   
# [4,] "450" ""   
# [5,] "125" "" 

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2016-05-02
    • 2019-06-14
    • 1970-01-01
    • 2016-08-24
    • 2019-09-30
    • 2011-09-14
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多