我有一组消息,其中一些是纯文本,另一些是用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。
答案 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。