Сделать HTML-страницу (текст) пригодной для анализа текста в R - PullRequest
0 голосов
/ 08 ноября 2018

Я хотел бы провести некоторую аналитику текста на следующей веб-странице: https://narodne -novine.nn.hr / clanci / sluzbeni / полный / 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

, поскольку у меня нет разделенных строк.

1 Ответ

0 голосов
/ 08 ноября 2018

Этот сайт имеет очень хорошо структурированный HTML-код с заголовками и основным текстом раздела, каждый из которых имеет свои собственные атрибуты 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 есть примеры того, как выполнить дополнительные преобразования очистки для облегчения анализа текста.

...