Как найти совпадения определенного c термина с udpipe в R? - PullRequest
0 голосов
/ 04 мая 2020

Я новичок в пакете udpipe, и я думаю, что он имеет большой потенциал для социальных наук.

Мой текущий проект по изучению того, как пишут новостные статьи о сетях и сетях (то есть о людях, не компьютерные сети). Для этого я скопировал 500 статей с поисковой строкой «сеть» с голландского сайта для новостей о гибкой экономике (это основной источник новостей и дискуссий, например, о самозанятости). Данные на голландском языке, но это не должно иметь значения для моего вопроса.

Что мне нравится использовать udpipe, это выяснить, в каком контексте используется существительное «netwerk» или глагол «netwerken». Я попытался kwic получить это (из quanteda), но это дает мне только «окно, в котором это происходит.

Я хотел бы использовать лемму (netwerk / netwerken) с Оператор вхождений, но без указания второго термина и ограничивается только указанной леммой c, а не вычисляет все совпадения.

Возможно ли это и как? Пример обычного языка: в моей сети , Я связываюсь со многими людьми через Facebook -> я хотел бы получить совмещение сети и контакт (глагол), я нашел большинство моих клиентов через мою сеть -> здесь я хотел бы, чтобы "моя сеть" + "нашла мою клиенты ".

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 04 мая 2020

Похоже, что в udpipe больше смысла в "контексте", чем в kwi c. Если уровень предложения, лемма и ограничивающие типы слов достаточны, это должно быть довольно прямым. Udpipe имела готовую голландскую модель.

#install.packages("udpipe")
library(udpipe)
#dl <- udpipe_download_model(language = "english")
# Check the name on download result
udmodel_en <- udpipe_load_model(file = "english-ud-2.0-170801.udpipe")

# Single and multisentence samples
txt <- c("Is this possible, and how? A normal language example: In
my network, I contact a lot of people through Facebook -> I would like to get co-occurrence of
network and contact (a verb) I found most of my clients through my network")
txtb <- c("I found most of my clients through my network")
x <- udpipe_annotate(udmodel_en, x = txt)
x <- as.data.frame(x)
xb <- udpipe_annotate(udmodel_en, x = txtb)
xb <- as.data.frame(xb)

# Raw preview
table(x$sentence[x$lemma == 'network'])

# Use x or xb here 
xn <- udpipe_annotate(udmodel_en, x = x$sentence[x$lemma == 'network'])
xdf <- as.data.frame(xn)

# Reduce noise and group by sentence ~ doc_id to table
df_view = subset(xdf, xdf$upos %in% c('PRON','NOUN','VERB','PROPN'))
library(tidyverse)
df_view %>% group_by(doc_id) %>% 
summarize(lemma = paste(sort(unique(lemma)),collapse=", "))

При быстром тестировании, готовая модель определяет сеть и сеть как независимые root леммы, поэтому некоторые грубые основы могут работать лучше. Однако я убедился, что включение сетей в предложения создает новое соответствие.

                    I found most of my clients through my network 
                                                                1 
I would like to get co-occurrence of network and contact (a verb) 
                                                                1 
     In my network, I contact a lot of people through Facebook -> 
                                                                1 
A tibble: 3 × 2
doc_id  lemma
<chr>   <chr>
doc1    contact, Facebook, I, lot, my, network, people
doc2    co-occurrence, contact, get, I, like, network, verb
doc3    client, find, I, my, network

Вполне возможно также найти предыдущие и последующие слова в качестве контекста, шагая вверх и вниз по соответствующим индексам леммы, но это ближе к тому, что kwi c уже делал. Я не включил динамическое c одновременное табулирование и упорядочение, но я бы подумал, что теперь это должно быть довольно тривиальной частью, когда извлекаются контекстные слова. Я думаю, что это может потребовать некоторых стоп-слов и т. Д. c, но они должны стать более очевидными с большими данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...