【问题标题】:Removing everything but html tags from a corpus从语料库中删除除 html 标签之外的所有内容
【发布时间】:2012-04-10 03:32:54
【问题描述】:

我正在使用包tm。我有一个充满 html 文档的语料库,我想删除除 html 标签之外的所有内容。这几天我一直在尝试这样做,但我似乎无法找到任何好的解决方案。

例如,假设我有一个这样的文档:

<html>
<body>

<h1>hello</h1>

</body>
</html>

我希望文档变成这样:

<html> <body> <h1>

(或者使用结束标签,我真的不介意。)

我的目标是计算每个标签在文档中的使用次数。

【问题讨论】:

    标签: regex r text-mining tm


    【解决方案1】:

    我对 tm 不熟悉,但这里是使用正则表达式的方法。

    (假设:您的字符串以 HTML 标记开头和结尾)

    str <- "<html><body><p>test<p>test2</body></html>"
    str <- gsub(">[^<^>]+<", "> <", str) # remove all the text in between HTML tags, leaving only HTML tags (opening and closing)
    str <- gsub("</[^<^>]+>", "", str) #remove all closing HTML tags.
    

    这会给你留下你想要的字符串。

    如果您不熟悉 RegEx,请查看 this site 了解更多入门信息。基本上,上面的第一个 gsub 将替换 &gt; 和 &lt; 之间的所有文本,这不是左括号或右括号(即所有非标记文本)。第二个 gsub 将替换所有以 &lt;/ 开头并以 &gt; 结尾的文本,什么都没有——从字符串中删除结束标签

    【讨论】:

    • 如果他有非常简单的html,这可能会起作用,但通常你不能用正则表达式解析html。例如,这不会串出属性。
    • @frankc 如果你要留下评论,你真的应该链接到The Question。 :)
    【解决方案2】:

    你应该看看http://rss.acs.unt.edu/Rdoc/library/XML/html/xmlTreeParse.html这样的东西

    在上面的链接中,查看示例代码。有一个部分显示了如何打印实体。我没用过这个包,所以不能直接担保。

    【讨论】:

      【解决方案3】:

      (1) gsubfn

      假设s 是输入字符串(它可能包含换行符),它匹配&lt; 后跟任何不是/、&gt; 或空格的字符串,并将其提取到标签中。 table 函数将出现的次数制成表格:

      library(gsubfn)
      tags <- strapply(tolower(s), "\\<([^/> ]+)", c, simplify = unlist)
      table(tags)
      

      例如,

      s <- "<html>
      <body>
      
      <h1>hello</h1>
      
      </body>
      </html>"
      tags <- strapply(tolower(s), "\\<([^/> ]+)", c, simplify = unlist)
      table(tags)
      

      给出这个:

      tags
      body   h1 html 
         1    1    1 
      

      如果您的文件非常大,那么 the development version of gsubfn 有一个名为 strapplyc 的快速版本。

      (2) XML

      如果在带引号的字符串和其他边界情况下有&lt; 和&gt; 符号,上述方法可能会混淆。无论如何,您的输入中可能没有任何此类实例,但以防万一第二种方法不存在该问题:

      library(XML)
      doc <- htmlTreeParse(tolower(s), asText = TRUE, useInternalNodes = TRUE)
      tags <- xpathSApply(doc, "//*", xmlName)
      table(tags)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 2013-05-01
        • 2014-03-14
        • 2018-08-30
        • 1970-01-01
        相关资源
        最近更新 更多