У меня есть большое текстовое тело, где я хочу эффективно заменить слова своими синонимами (например, заменить все вхождения «автомобиля» синонимом «автомобиль»). Но я изо всех сил стараюсь найти правильный (эффективный способ) для этого.Заменить слова в text2vec эффективно
Для последующего анализа я использую библиотеку text2vec
и хотел бы использовать эту библиотеку для этой задачи (избегая tm
, чтобы уменьшить зависимости).
An (неэффективный) способ будет выглядеть следующим образом:
# setup data
text <- c("my automobile is quite nice", "I like my car")
syns <- list(
list(term = "happy_emotion", syns = c("nice", "like")),
list(term = "car", syns = c("automobile"))
)
Мое решение перебором, чтобы иметь что-то вроде этого, и использовать цикл для поиска слов и заменить их
library(stringr)
# works but is probably not the best...
text_res <- text
for (syn in syns) {
regex <- paste(syn$syns, collapse = "|")
text_res <- str_replace_all(text_res, pattern = regex, replacement = syn$term)
}
# which gives me what I want
text_res
# [1] "my car is quite happy_emotion" "I happy_emotion my car"
Я использовал это с tm
, используя этот подход by MrFlick (используя tm::content_transformer
и tm::tm_map
), но я хочу уменьшить зависимости проекта, заменив tm
тем быстрее text2vec
.
Я думаю, оптимальным решением было бы как-то использовать text2vec
s itoken
, но я не уверен, как это сделать. Есть идеи?
Это похоже на очень интересную концепцию! Я сделал несколько быстрых тестов на них. В то время как на небольших синонимах-образцах for-loop работает быстрее, подход 'fastmatch' намного быстрее в больших списках! Кроме того, поскольку я все еще работаю над проектом, ваши 2 цента очень ценны здесь! – David
Также обратите внимание, что 'text2vec :: word_tokenizer' довольно медленный по сравнению с' stringr :: str_split (TEXT_HERE, pattern = stringr :: border ("word")) '. Единственная причина, по которой я не использую 'stringr' /' stringi'/'tokenizers', - это то, что я хочу, чтобы количество зависимостей' text2vec' было как можно меньше. –