2017-03-19 4 views
1

Ich versuche, Apostrophe von einem Korpus zu entfernen, aber nur, wenn sie das erste Zeichen in einem Absatz sind. Ich habe Beiträge über das Finden des ersten Wortes in einem Satz, aber keinen Absatz gesehen.Erstes Wort eines Absatzes extrahieren R

Der Grund, warum ich das versuche, ist, weil ich Text analysiere. Ich möchte alle Interpunktion entfernen, aber Apostrophe und Bindestriche nur in der Mitte der Wörter verlassen. Um das zu starten, habe ich:

Dies entfernt erfolgreich alle Apostrophen außer denen, die auf neuen Zeilen beginnen. Um die auf neue Linien zu entfernen, habe ich versucht:

for(j in seq(docs.test)) 
{  
    docs[[j]] <- gsub("\r\'", " ", docs[[j]]) 
    docs[[j]] <- gsub("\n\'", " ", docs[[j]]) 
    docs[[j]] <- gsub("<p>\'", " ", docs[[j]]) 
    docs[[j]] <- gsub("</p>\'", " ", docs[[j]]) 

} 

Im Allgemeinen denke ich, es wäre sinnvoll sein, einen Weg zu finden, das erste Wort eines Absatzes zu extrahieren. Für mein spezifisches Problem versuche ich es nur, um an diese Apostrophe heranzukommen. Ich benutze derzeit die Pakete qdap und tm, aber offen für mehr.

Irgendwelche Ideen?

Vielen Dank!

+1

eine Möglichkeit ist, die [tidytext] (http://tidytextmining.com/intro.html) Rahmen und verwenden Tokenizer zu verwenden: 'Bibliothek (Gutenbergr); Bibliothek (ordentlich); Bibliothek (ordentlicher Text); moby_dick <- gutenberg_download (2489); moby_dick%>% unnest_tokens (Absatz, Text, Token = 'Absätze')%>% group_by (Absatz_n = Zeilennummer())%>% unnest_tokens (Wort, Absatz)%>% slice (1) 'Regex funktioniert auch, obwohl was es sieht so aus, hängt davon ab, wie der Text gespeichert ist. – alistaire

+0

Ich habe Ihren Vorschlag ausprobiert und fullplay = data_frame (Datei = c2name)%>% muate (text = map (Datei, read_lines)) fullplay <- fullplay%>% unest_tokens_ (Wort, Text)%>% mutate_ (linsumber = row_number()) Und ich habe einen Fehler: Fehler in unnest_tokens_ (as.vector (fullplay)): unnest_tokens erwartet, dass alle Spalten von Eingangsatom Vektoren (keine Listen sein) Also habe ich versucht, diese fullplay.new = unlist (fullplay $ text) fullplay.new <- fullplay.new%>% unest_tokens_ (Wort, Text)%>% mutate_ (linenumber = row_number()) Und es ist ein Fehler aufgetreten Fehler in tbl [[input_col]]: ungültiger tiefgestellter Typ 'closure' –

+0

Es ist schwer zu sagen, ohne die Struktur Ihrer Daten sehen zu können, aber wenn Sie ac haben Orpus, wie die Frage schon andeutet, versuchen Sie es mit tidytexts "ordentlichen" Methoden, um sie zu einem data.frame zu zwingen. – alistaire

Antwort

0

Sie haben kein Testbeispiel angegeben, aber hier ist eine Funktion, die Intra-Wort-Apostrophe und Bindestriche enthält. Es ist in einem anderen Paket, aber wie das Beispiel am Ende zeigt, ist leicht in eine reguläre Liste dazu gezwungen, wenn Sie es brauchen:

require(quanteda) 

txt <- c(d1 = "\"This\" is quoted.", 
     d2 = "Here are hypen-words.", 
     d3 = "Example: 'single' quotes.", 
     d4 = "Possessive plurals' usage.") 

(toks <- tokens(txt, removePunct = TRUE, removeHyphens = FALSE)) 
## tokens from 4 documents. 
## d1 : 
## [1] "This" "is"  "quoted" 
## 
## d2 : 
## [1] "quanteda's" "hypen-words" 
## 
## d3 : 
## [1] "Example" "single" "quotes" 
## 
## d4 : 
## [1] "Possessive" "plurals" "usage" 

Sie können auf diese Weise auf eine Liste zurück, und natürlich zurück wenn Sie Dokumente müssen von sapply() sein, um eine paste(x, collapse = " ") ing usw.

as.list(toks) 
## $d1 
## [1] "This" "is"  "quoted" 
## 
## $d2 
## [1] "quanteda's" "hypen-words" 
## 
## $d3 
## [1] "Example" "single" "quotes" 
## 
## $d4 
## [1] "Possessive" "plurals" "usage" 
Verwandte Themen