komplett bearbeitet, großer Dank Shayaa für den Rat!Mindestabstand Funktion zwischen Strings
Aus Sätzen in einer Matrix (eingelesen von csv) sollen Wörter erkannt werden, die in Listen gespeichert sind (eingelesen aus txt).
sentences_list <- matrix(c(
"this screen is great",
"this camera is not bad",
"everything good but the camera is awesome",
"everything bad but the camera is awesome",
"battery is ok but the camera is awesome"), ncol = 1)
word_list_one <-list("screen", "camera", "battery")
word_list_two <-list("good", "great", "awesome")
word_list_three <-list("bad", "awful", "poor")
word_list_four <-list("not", "don't", "neither")
one <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_one, sep = '|', collapse = '|'))
})
two <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_two, sep = '|', collapse = '|'))
})
three <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_three, sep = '|', collapse = '|'))
})
four <- apply(sentences_list, 2, function(x) {
str_detect(x, paste(word_list_four, sep = '|', collapse = '|'))
})
Der folgende Code kann verwendet werden, um zu überprüfen, welche Wörter gefunden wurden. (Die Ergebnisse werden nicht direkt angezeigt gespeichert, da die Anzahl der Ergebnisse auf eine bestimmte Weise in der Zeit nach gezählt wird)
row=5
print(sentences_list[row])
c(str_extract(sentences_list[row], paste(word_list_one, sep = '|', collapse = '|')))
c(str_extract(sentences_list[row], paste(word_list_two, sep = '|', collapse = '|')))
c(str_extract(sentences_list[row], paste(word_list_three, sep = '|', collapse = '|')))
c(str_extract(sentences_list[row], paste(word_list_four, sep = '|', collapse = '|')))
Für row=1
und row=2
alles funktioniert, wie es sollte, aber nicht für die folgenden. Dies liegt daran, dass nur die erste Übereinstimmung in einem Satz von word_list_x
zurückgegeben wird. Was ich lieber möchte, dass der Code zu tun ist, gibt das Wort für eine word_list_x
zurück, die dem Wort in einem anderen word_list_
am nächsten ist.
so für row=3
in sentences_list
das Ergebnis für die word_list_two = "good"
, weil es zuerst gefunden wird. Was sollte das Ergebnis sein, ist word_list_two = "awesome"
, weil in dem Satz von row=3
es näher an das Ergebnis in word_list_one = "camera"
gefunden steht.
wie für row=4
in sentences_list
das Ergebnis für die word_list_three = "bad"
und word_list_two = "awesome"
. Da das Ergebnis von word_list_two
näher an das in word_list_one = "camera"
gefundene Ergebnis ist, sollte nur das Ergebnis von word_list_two = "awesome"
zurückgegeben werden, wobei word_list_three = " "
leer gelassen wird.
wie für row=5
in sentences_list
das Ergebnis für die word_list_one = "battery"
, weil es zuerst gefunden wird. Was das Ergebnis sein sollte, ist word_list_one = "camera"
, weil es in dem Satz von row=5
näher an das Ergebnis in word_list_two= "great"
gefunden wird.
Offensichtlich bin ich als Anfänger völlig überfordert mit dem Umfang dieses Projekts und ich bin sehr dankbar für jede Hilfe, die Sie zur Verfügung stellen können, vielen Dank!
Nur fyi, das ist kein reproduzierbares Beispiel. Ich kann den Code nicht starten und die Ergebnisse reproduzieren. Ich habe kein 'df' mit Wortlisten. Im Großen und Ganzen ist ein 'dat.frame' nicht das beste Repository für Ihre Wörter. Ein Vektor ist. Für viele Vektoren von Wörtern möchten Sie eine Liste verwenden. Vielleicht können Sie diese Frage noch einmal bearbeiten. – shayaa
Vielen Dank für Ihre Beratung, ich weiß es zu schätzen! Ich bin immer noch sehr neu in R und auch Stackoverflow. Ich werde versuchen, die Frage in Bezug auf das reproduzierbare Beispiel in einem Moment zu verbessern. Ich kenne mich nicht mit allen Repositories aus, aber ich habe Listen mit den Wörtern erstellt, die ich im Text finden möchte. Was den Text angeht, kann ich meine CSV-Datei nicht mit mehreren Sätzen für jedes Element in etwas anderes als einem Datenrahmen oder einer Matrix einlesen. Würde eine Matrix tun? – dennis
Hi @dennis, ich habe eine kurze Frage, was ist, wenn das letzte Element von 'sets_list' zum Beispiel" Akku ist gut, aber die Kamera ist großartig "ist, was wäre das Ergebnis? In diesem Fall könnten Sie Entfernungen von zwei verschiedenen Wörtern von "word_list_one" erkennen: "camera" und "battery", und beide hätten ein Wort von "word_list_two" in gleicher Entfernung: "good" und "awesome". –