Seite 1 von 1

Corpus Text Mining

Verfasst: Di Jul 07, 2020 12:05 pm
von Luisa_33
Hallo,

ich habe eine Frage zur Corpus-Funktion.
Und zwar möchte ich aus meinen Daten die Nummern, Punkte, .. usw. entfernen.
Am Ende bekomme ich eine Liste, siehe Bild.

Wie kann ich die Daten aus der Liste auslesen und anschließend in mein Ausgangs-Dataframe einfügen?
Kann mir jemand einen Tipp geben, wie das funktioniert. Ich habe dazu leider nicht das passende gefunden.

Aktueller Code

Code: Alles auswählen

mydata <- Corpus(VectorSource(newdata$TEXT))
# remove extra whitespace
mydata <- tm_map(mydata, stripWhitespace)
# Remove numbers
mydata <- tm_map(mydata, removeNumbers)

mydata <- as.data.frame(as.matrix(mydata))
dataframe<-data.frame(text=unlist(sapply(mydata)), 
                      stringsAsFactors=F)
Liebe Grüße

Re: Corpus Text Mining

Verfasst: Do Jul 09, 2020 11:57 am
von ruedi_br
Das Paket tm hat auch einen Befehl
removePunctuation
, der weiterhelfen könnte.
VG
Ruedi

Re: Corpus Text Mining

Verfasst: Fr Jul 10, 2020 10:46 am
von Luisa_33
Ja, das habe ich schon gesehen. Danke :)
Hat jemand eine Antwort auf die andere Frage?

Re: Corpus Text Mining

Verfasst: Fr Jul 10, 2020 12:37 pm
von Athomas
Luisa_33 hat geschrieben: Fr Jul 10, 2020 10:46 am Hat jemand eine Antwort auf die andere Frage?
Es ist besser - und darum wird ja auch immer wieder nachdrücklich gebeten - etwas für den potentiellen Antwortgeber Nachvollziehbares zur Verfügung zu stellen.

Die Minimalausstattung sind also das Programm (bitte komplett, einschließlich aller zu ladenden Libraries!) UND Daten - wenn es aus irgenwelchen Gründen nicht die Originaldaten sein können, zumindest ein (modifizierter) Auszug, bei dem das bestehende Problem auftritt.

Re: Corpus Text Mining

Verfasst: Fr Jul 10, 2020 2:07 pm
von Luisa_33
Okay. hoffentlich sind die weiteren Daten hilfreich.

Also ich habe ein Problem beim Umformen des Corpus.
Ich möchte, dass die Veränderungen des Textes aus dem Corpus myData wieder in newdata$Text überführt werden.
Leider bekomme ich das nicht hin.

Des Weiteren sind in den Zeilen der Spalte Text, die Inhalte unterschiedlich lang.
Manchmal steht dort 1 Wort und manchmal 10. Ich würde aber gern höchstens 3 Wörter in den Zeilen stehen haben.
Ich habe dazu den Befehl Substr() gefunden. Aber dieser löscht immer nur einzelne Buchstaben und nicht Wörter.
Vllt. habt ihr dazu auch eine Idee.

Vielen Dank schon mal.


Code: Alles auswählen

library(readxl)
library(tm)

newdata<- read_xlsx("/Volumes/TextMining/neu2.xlsx")

#Lösche alle Zeilen die NA sind und 0
newdata <- newdata[complete.cases(newdata), ]
newdata <- newdata[newdata$Größe != "0", ] 
newdata <- newdata[newdata$Text != "0", ] 

mydata <- Corpus(VectorSource(newdata$TEXT))

#Remove Sonderzeichen 
j=1
for(j in seq(mydata)){
  mydata[[j]] <- gsub("/", " ", mydata[[j]])
  mydata[[j]] <- gsub("!", " ", mydata[[j]])
}
# remove extra whitespace
mydata <- tm_map(mydata, stripWhitespace)
# Remove numbers
mydata <- tm_map(mydata, removeNumbers)
mydata <- as.vector(mydata)

'nur ersten 3 wörter --> noch nicht gelöst'
j=1
for(j in seq(mydata)){
  mydata[[j]] <- substr(mydata[[j]], )
}


mydata <- as.data.frame(as.matrix(mydata))
dataframe<-data.frame(text=unlist(sapply(mydata)), 
                      stringsAsFactors=F)

Re: Corpus Text Mining

Verfasst: Fr Jul 10, 2020 2:52 pm
von Athomas
mydata <- Corpus(VectorSource(newdata$TEXT))
Was soll das bringen, warum schreibst Du hier Text groß?

Re: Corpus Text Mining

Verfasst: Fr Jul 10, 2020 5:43 pm
von Luisa_33
Das war aus Versehen, weil ich meine Variablen umbenannt habe bevor ich sie hochgeladen habe.

So ist es natürlich richtig.
mydata <- Corpus(VectorSource(newdata$Text))
Athomas hat geschrieben: Fr Jul 10, 2020 2:52 pm
mydata <- Corpus(VectorSource(newdata$TEXT))
Was soll das bringen, warum schreibst Du hier Text groß?

Re: Corpus Text Mining

Verfasst: Fr Jul 10, 2020 6:49 pm
von Athomas
"Was soll das bringen" soll bedeuten "Was versprichst Du Dir von der Anwendung der Funktion "Corpus" auf newdata$Text"?

Code: Alles auswählen

> mydata[[1]]$content
[1] "Schneiden der Platte / groß, hartes Material"

Re: Corpus Text Mining

Verfasst: Sa Jul 11, 2020 2:23 am
von Luisa_33
Okay. also ich will ja den Inhalt in der Spalte Text "bereinigen".

Und tm_map ist nicht auf Dataframes anwendbar. Wenn ich das versuche, bekomme ich immer eine Fehlermeldung.
Ich habe beispielsweise auch schon das versucht.

Code: Alles auswählen

# remove extra whitespace
newdata <- tm_map(newdata$Text, stripWhitespace)

# remove extra whitespace
newdata <- tm_map(newdata, stripWhitespace)
Da das nicht funktioniert hat, habe ich nach Alternativen gesucht und bin auf Corpus gestoßen.
In der Variable mydata werden die Änderungen, die am Text vorgenommen werden, gespeichert.

Code: Alles auswählen

mydata <- Corpus(VectorSource(newdata$Text))
Ich weiß nicht, ob Corpus die Lösung für mein Problem ist. Das erschien mit jedoch von allen gefundenen Lösungen am hilfreichsten.
Nur dann konnte ich den Inhalt von Corpus nicht wieder in newdata$Text speichern.

Code: Alles auswählen

> mydata[[1]]$content
[1] "Schneiden der Platte / groß, hartes Material"
Für diese Spalte hätte ich am Ende gern das Ergebnis: [1] Schneiden der Platte
Der Rest sollte aus der Zeile gelöscht werden.
Damit verspreche ich mir, dass in meinen Orginaldaten beispielsweise Firmennamen gelöscht werden.

Zudem gibt es den Text: Verpackung / Versand --> dieser soll am Ende Verpackung Versand heißen.

Re: Corpus Text Mining

Verfasst: Sa Jul 11, 2020 10:08 am
von Athomas
Verstehe ich Dich richtig, dass einmal alles ab dem "/" gelöscht, und das andere Mal lediglich das "/" selbst entfernt werden soll - und das, ohne detailliert vorzugeben, in welcher Situation die jeweilige Alternative greifen soll :shock: ?