使HTML页(文本)适合R中的文本分析

Make HTML page (text) suitable for text analysis in R

我想对来自以下网页的文本进行一些文本分析: https://narodne-novine.nn.hr/clanci/sluzbeni/full/2007_07_79_2491.html

我不知道如何将此 HTML 转换为整洁的文本对象(文本中的每一行都是数据框中的每一行)。 例如,仅应用 html_text() 函数没有帮助:

url <- "https://narodne-novine.nn.hr/clanci/sluzbeni/full/2007_07_79_2491.html"
p <- rvest::read_html(url, encoding = "UTF-8") %>%
  rvest::html_text()
p

因为我没有分隔行。

该站点有一些非常 well-structured HTML 部分的 headers 和 body 文本,每个文本都有自己的 align 属性。我们可以使用它按部分提取您的文本:

library(rvest)
library(tidyverse)  

pg <- read_html("https://narodne-novine.nn.hr/clanci/sluzbeni/full/2007_07_79_2491.html")

html_nodes(pg, xpath = ".//p[@align='center']/following-sibling::p[@align='justify']") %>% 
  map_df(~{
    data_frame(
      section = html_node(.x, xpath=".//preceding-sibling::p[@align='center'][1]") %>% 
        html_text(trim=TRUE),
      section_text = html_text(.x, trim=TRUE)
    )
  }) 
## # A tibble: 38 x 2
##    section    section_text                                                                                      
##    <chr>      <chr>                                                                                             
##  1 Članak 1.  "U Zakonu o autorskom pravu i srodnim pravima (»Narodne novine«, br. 167/03.) u \r\nčlanku 4. sta…
##  2 Članak 2.  "U članku 8. stavku 2. točki 1. riječ: »standardi« briše se.\r\nU stavku 3. druga rečenica mijenj…
##  3 Članak 3.  "U članku 20. stavku 2. riječi: »na području Republike Hrvatske« zamjenjuju se \r\nriječima: »na …
##  4 Članak 4.  "U članku 32. stavku 5. točki 1. i 3. riječ: »naprava« zamjenjuje se riječju: \r\n»uređaja«.\r\nU…
##  5 Članak 5.  U članku 39. stavku 1. riječi: »stavka 1.« brišu se.                                              
##  6 Članak 6.  "U članku 44. stavku 5. dodaje se rečenica koja glasi:\r\n»U slučaju sumnje, u drugim slučajevima…
##  7 Članak 7.  "U članku 52. stavku 3. riječ: »korištenja« zamjenjuje se riječju: \r\n»iskorištavanja«."         
##  8 Članak 8.  U članku 86. iza riječi: »koji je« dodaje se riječ: »u«.                                          
##  9 Članak 9.  "U članku 98. u stavku 1. riječ: »tehnoloških« zamjenjuje se riječju: \r\n»tehničkih«.\r\nStavak …
## 10 Članak 10. "U članku 109. dodaje se stavak 3. koji glasi:\r\n»(3) Odredbe iz članka 20. ovoga Zakona o iscrp…
## # ... with 28 more rows

您需要仔细检查以上内容是否遗漏任何内容。即使是这样,扩展答案也应该很简单。

您也可以使用上面的方法分解单独的行:

html_nodes(pg, xpath = ".//p[@align='center']/following-sibling::p[@align='justify']") %>% 
  map_df(~{
    data_frame(
      section = html_node(.x, xpath=".//preceding-sibling::p[@align='center'][1]") %>% 
        html_text(trim=TRUE),
      section_text = html_text(.x, trim=TRUE)
    )
  }) %>% 
  mutate(section_text = stri_split_lines(section_text)) %>% 
  unnest(section_text)
## # A tibble: 334 x 2
##    section   section_text                                                                     
##    <chr>     <chr>                                                                            
##  1 Članak 1. "U Zakonu o autorskom pravu i srodnim pravima (»Narodne novine«, br. 167/03.) u "
##  2 Članak 1. članku 4. stavak 2. mijenja se i glasi:                                          
##  3 Članak 1. "»(2) Odredbe iz ovoga Zakona o definicijama pojedinih autorskih imovinskih "    
##  4 Članak 1. "prava, o pravu na naknadu za reproduciranje autorskog djela za privatno ili "   
##  5 Članak 1. "drugo vlastito korištenje, o pravu na naknadu za javnu posudbu, kao i o "       
##  6 Članak 1. "iscrpljenju prava distribucije, iznimkama i ograničenjima autorskih prava, "    
##  7 Članak 1. "početku tijeka i učincima isteka rokova trajanja autorskog prava, autorskom "   
##  8 Članak 1. "pravu u pravnom prometu te o odnosu autorskog prava i prava vlasništva "        
##  9 Članak 1. "primjenjuju se na odgovarajući način i za srodna prava, ako za njih nije što "  
## 10 Članak 1. posebno određeno ili ne proizlazi iz njihove pravne naravi.«                     
## # ... with 324 more rows

tidytext 包中包含有关如何执行进一步清理转换以促进文本挖掘的示例。