Как извлечь простой текст из файла .docx, используя R - PullRequest
0 голосов
/ 21 мая 2018

Кто-нибудь знает что-нибудь, что он может порекомендовать, чтобы извлечь простой текст из статьи в формате .docx (предпочтительно с R)?

Скорость не имеет решающего значения, и мы могли бы даже использоватьвеб-сайт, у которого есть API для загрузки и извлечения файлов, но я не смог его найти.Мне нужно извлечь введение, метод, результат и заключение. Я хочу удалить реферат, ссылки и особенно графику и таблицу спасибо

Ответы [ 4 ]

0 голосов
/ 21 мая 2018

Вы можете сделать это с пакетом officer:

library(officer)
example_pptx <- system.file(package = "officer", "doc_examples/example.docx")
doc <- read_docx(example_pptx)
summary_paragraphs <- docx_summary(doc)
summary_paragraphs[summary_paragraphs$content_type %in% "paragraph", "text"]
#>  [1] "Title 1"                                                                
#>  [2] "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "              
#>  [3] "Title 2"                                                                
#>  [4] "Quisque tristique "                                                     
#>  [5] "Augue nisi, et convallis "                                              
#>  [6] "Sapien mollis nec. "                                                    
#>  [7] "Sub title 1"                                                            
#>  [8] "Quisque tristique "                                                     
#>  [9] "Augue nisi, et convallis "                                              
#> [10] "Sapien mollis nec. "                                                    
#> [11] ""                                                                       
#> [12] "Phasellus nec nunc vitae nulla interdum volutpat eu ac massa. "         
#> [13] "Sub title 2"                                                            
#> [14] "Morbi rhoncus sapien sit amet leo eleifend, vel fermentum nisi mattis. "
#> [15] ""                                                                       
#> [16] ""                                                                       
#> [17] ""
0 голосов
/ 21 мая 2018

Вы должны обнаружить, что один из этих пакетов поможет вам.

В конце концов, современные форматы файлов Office (OpenXML) - это просто * .zip файлы, содержащие структурированный контент XML, и поэтому, если у вас хорошо структурированный контент, вы можете просто открыть его таким образом.Я бы начал здесь (http://officeopenxml.com/anatomyofOOXML.php), и вы также сможете отменить выбор OpenXML SDK для руководства (https://msdn.microsoft.com/en-us/library/office/bb448854.aspx)

0 голосов
/ 21 мая 2018

Вы можете попробовать использовать библиотеку readtext:

library(readtext)
x <- readtext("/path/to/file/myfile.docx")
# x$text will contain the plain text in the file

Переменная x содержит только текст без какого-либо форматирования, поэтому, если вам нужно извлечь некоторую информацию, вам нужно выполнить поиск строки.Например, для документа, который вы упомянули в своем комментарии, один из подходов может быть следующим:

library(readtext)
doc.text <- readtext("test.docx")$text

# Split text into parts using new line character:
doc.parts <- strsplit(doc.text, "\n")[[1]]

# First line in the document- the name of the Journal
journal.name <- doc.parts[1]
journal.name
# [1] "International Journal of Science and Research (IJSR)"

# Similarly we can extract some other parts from a header
issn <-  doc.parts[2]
issue <- doc.parts[3]

# Search for the Abstract:
abstract.loc <- grep("Abstract:", doc.parts)[1]

# Search for the Keyword
Keywords.loc <- grep("Keywords:", doc.parts)[1]

# The text in between these 2 keywords will be abstract text:
abstract.text <- paste(doc.parts[abstract.loc:(Keywords.loc-1)], collapse=" ")

# Same way we can get Keywords text:
Background.loc <- Keywords.loc + grep("1\\.", doc.parts[-(1:Keywords.loc)])[1]
Keywords.text <- paste(doc.parts[Keywords.loc:(Background.loc-1)], collapse=" ")
Keywords.text
# [1] "Keywords: Nephronophtisis, NPHP1 deletion, NPHP4 mutations, Tunisian patients"

# Assuming that Methods is part 2
Methods.loc <- Background.loc + grep("2\\.", doc.parts[-(1:Background.loc)])[1]
Background.text <- paste(doc.parts[Background.loc:(Methods.loc-1)], collapse=" ")


# Assuming that Results is Part 3
Results.loc <- Methods.loc- + grep("3\\.", doc.parts[-(1:Methods.loc)])[1]
Methods.text <- paste(doc.parts[Methods.loc:(Results.loc-1)], collapse=" ")

# Similarly with other parts. For example for Acknowledgements section:
Ack.loc <- grep("Acknowledgements", doc.parts)[1]
Ref.loc <- grep("References", doc.parts)[1]
Ack.text <- paste(doc.parts[Ack.loc:(Ref.loc-1)], collapse=" ")
Ack.text
# [1] "6. Acknowledgements We are especially grateful to the study participants. 
# This study was supported by a grant from the Tunisian Ministry of Health and 
# Ministry of Higher Education ...

Точный подход зависит от общей структуры всех документов, которые вы должны искать.Например, если первый раздел всегда называется «Фон», вы можете использовать это слово для поиска.Однако, если это иногда может быть «Фон», а иногда «Введение», то вы можете искать «1».шаблон.

0 голосов
/ 21 мая 2018

Pandoc - фантастическое решение для подобных задач.С документом с именем a.docx вы будете запускать в командной строке

pandoc -f docx -t markdown -o a.md a.docx

Затем вы можете использовать инструменты регулярных выражений в R, чтобы извлечь то, что вам нужно, из вновь созданного a.md, то есть текста.По умолчанию изображения не преобразуются.

Кстати, Pandoc является частью RStudio, поэтому, возможно, он у вас уже есть.

...