为什么来自tm.plugin.webmining的extractHTMLStrip()会截断61个字符以下的字符串?

时间:2015-12-03 01:39:23

标签: html regex r string tm

我有一组消息,其中一些是纯文本,另一些是用HTML标记标记的。带有HTML标记的邮件似乎不包含代码<html><body>;到目前为止,我只看过<p></p><br>。我试图使用R包extractHTMLParse()中的tm.plugin.webmining从包含HTML的字符串中删除HTML标记,但是对于短于61个字符的字符串,函数会失败(如果字符串包含html标记,则为68) )。

例如,

extractHTMLStrip("This message has 61 characters, sixty-one characters exactly.")
[1] "This message has 61 characters, sixty-one characters exactly."

但如果我在结束时删除句点,则不会返回任何内容,

extractHTMLStrip("This message has 61 characters, sixty-one characters exactly")
character(0) 

如果我在带有HTML标签的字符串上尝试,最小长度会跳到68:

extractHTMLStrip("<p>This string has 68 characters, sixty-eight characters exactly</p>")
[1] "This string has 68 characters, sixty-eight characters exactly"

如果我删除最后一个字符,则调用失败:

extractHTMLStrip("<p>This string has 68 characters, sixty-eight characters exactl</p>")
character(0)

我用Google搜索了“extracthtmlstrip最小长度”并在tm.plugin.webmining手册中搜索了“length”这个词,但这些都没有提供解决方案。 StackOverflow似乎只有两个(现在是三个)提到tm.plugin.webmining的问题,但他们没有提到这个问题。

任何人都可以解释这种行为以及如何从任意长度的字符串中删除HTML标记吗?理想情况下,我想使用一种理解HTML而不仅仅是正则表达式的工具来做到这一点。

OS X 10.10.3,R版本3.1.2和tm.plugin.webmining版本1.3。

1 个答案:

答案 0 :(得分:0)

它看起来像代码中的错误。

该函数从htmlTreeParse调用XML,结果为:

library(XML)
tree <- htmlTreeParse("whatever you entered", asText = TRUE, useInternalNodes = TRUE, encoding = "latin1")

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>whatever you entered</p></body></html>

<!DOCTYPE....>是一个通用标题,由函数输入。

以下步骤拉出最长的子节点,如果您输入的内容很小,则恰好是<!DOCTYPE字符串(长度为106个字符,这是带有添加标签的68个字符长输入的长度),然后通过调用xmlValue删除它,从而产生character(0)输出。

我已经提交了bug on their github