wolfram-mathematica – 使用Mathematica从HTML中提取信息

前端之家收集整理的这篇文章主要介绍了wolfram-mathematica – 使用Mathematica从HTML中提取信息前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有一个简单的方法来从特定的HTML表中使用Mathematica提取数据?进口似乎是非常强大的,而且Mathematica似乎能够很好地处理诸如XML之类的格式。

这里有一个例子:http://en.wikipedia.org/wiki/Unemployment_by_country

解决方法

有关这方面的一般例子,请参考以下内容

>如何| Clean Up Data Imported from a ZIP File
>如何| Clean Up Data Imported from a Website

对于这个具体的例子,只需要导入它

tmp = Import["http://en.wikipedia.org/wiki/Unemployment_by_country","Data"]

清理它是相当简单的这个进口。该表是3列,从其余的东西中提取出来:

tmp1 = Cases[tmp,{_,_?NumberQ,_},\[Infinity]]

你可能想删除方括号引用(??):

tmp1[[All,3]] = Flatten[If[StringQ[#],StringCases[#,x__ ~~ Whitespace ~~ "[" ~~ __ :> x],#] & /@ tmp1[[All,3]]]

Grid[tmp1,Frame -> All]

注意,如果您希望在表中,您可以添加标题,您可能会这样做

Grid[Join[{{"Country / Region","Unemployment rate (%)","Source / date of information"}},tmp1],Frame -> All]

纯粹主义者可能会反对最后一步,但是当你正在刮削数据时,你只是想完成这项工作,每个网站都是一个案例展望。所以一些手动检查和灵活性让您获得最快的整体效果

编辑

如果你想要标志,你也可以从CountryData获取它们。需要进一步的清理,否则会发生大量的错误。清理涉及删除对括号中“主权国家”的引用。例如“关岛(美国)” – > “Gaum”。

tmp2 = Flatten[
  If[StringMatchQ[#,__ ~~ "(" ~~ __],z__ ~~ Shortest["(" ~~ __ ~~ ")" ~~ EndOfString] :> 
       StringTrim@z],StringTrim[#]] & /@ tmp1[[All,1]]]

这仍然会产生CountryData无法识别的输出

flags = CountryData[#,"Flag"] & /@ tmp2;
Cases[flags,_CountryData]

6次错过了190次。从输出删除那些未命中:

flags = If[Head[#] === CountryData,{""},{#}] & /@ flags; (*much faster than rule replacement*)
tmp2 = Join[flags,tmp1,2];
Grid[tmp2,Frame -> All]

请注意,这需要一段时间才能呈现。

您可以根据需要明显地使用网格选项来设置网格,如果需要,还可以调整图像的大小。

猜你在找的HTML相关文章