【问题标题】:Extracting text between html tags and labelling it with the tag in R提取html标签之间的文本并用R中的标签标记它
【发布时间】:2017-03-27 23:56:23
【问题描述】:

我正在尝试学习如何在 R 中对句子进行分类。

我有一个包含以下格式句子的文本文件:

<happy>
  This did the trick : the boys now have a more distant friendship and David is much happier . 
<\happy>
<happy>
  When Anna left Inspector Aziz , she was much happier . 
<\happy>

我打算用以下方式标记句子:

dataset$text = When Anna left Inspector Aziz , she was much happier
dataset$label = happy

我想提取句子并用情感标记它们。我应该如何处理这个?我知道我应该在正则表达式中使用分组,但我不知道如何在 R 中执行此操作。我是新手并且正在学习。

rl <- readLines('sentences.txt')

【问题讨论】:

  • 那些反斜杠会导致问题;如果它们是正斜杠,则可以将其解析为 XML。
  • lapply(split(Filter(nzchar, gsub('&lt;\\\\\\w+&gt;|[&lt;&gt;]', '', trimws(rl))), c(1,1,2,2)), as.list)剩下的交给你
  • 这是一个真正的 sn-p 吗? (a) 它不是 HTML (b) 它不是有效的 XML (c) 我知道没有使用反斜杠的标记语言。

标签: r nlp text-mining


【解决方案1】:

目前这是格式错误的 XML,如

  • XML 在结束标记中使用正斜杠而不是反斜杠。实际上,您甚至无法按原样将其读入 R,因为它会尝试将 \h 解析为转义字符,除非您添加额外的反斜杠来转义反斜杠本身。
  • XML 需要包含在单个标记中。不过,这个问题更容易解决(paste 在某些标签上)。

如果您的实际数据是正确格式化的 XML,那么您可以使用 xml2 或 XML 包进行解析。我喜欢 purrr::map_df 迭代节点并将结果强制转换为 data.frame,但如果您愿意,您可以在基础 R 中做同样的事情。

library(xml2)
library(purrr)

'<happy>
    This did the trick : the boys now have a more distant friendship and David is much happier . 
</happy>
<happy>
    When Anna left Inspector Aziz , she was much happier . 
</happy>' %>% 
    paste('<sent>', ., '</sent>') %>%    # add enclosing tags
    read_xml() %>% 
    xml_find_all('//text()/parent::*') %>%    # select nodes that are parents of text
    map_df(~list(text = xml_text(.x, trim = TRUE), 
                 emotion = xml_name(.x)))

## # A tibble: 2 × 2
##                                                                                           text emotion
##                                                                                          <chr>   <chr>
## 1 This did the trick : the boys now have a more distant friendship and David is much happier .   happy
## 2                                       When Anna left Inspector Aziz , she was much happier .   happy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多