如何在 R 中找到特定术语与 udpipe 的共现?

How to find the co-occurences of a specific term with udpipe in R?

我是udpipe包的新手,我认为它对社会科学有很大的潜力。

我目前的一个项目是研究新闻文章如何写网络和网络(即人种,而不是计算机网络)。为此,我从一个荷兰网站上搜索了 500 篇搜索字符串 "network" 的文章,以获取有关灵活经济的新闻(这是有关自营职业等新闻和讨论的主要来源)。数据是荷兰语的,但这对我的问题不重要。

我喜欢使用 udpipe 的目的是找出在什么上下文中使用名词 "netwerk" 或动词 "netwerken"。我尝试 kwic 得到这个(来自 quanteda),但这只给了我它出现的“window。

我想将引理 (netwerk/netwerken) 与同现运算符一起使用,但不指定第二项,并且仅限于该特定引理,而不是计算所有同现。

这可能吗,怎么办? 一个普通的语言示例: 在我的网络中,我通过 Facebook 联系了很多人 -> 我希望网络和联系人同时出现(一个动词) 我通过我的网络找到了我的大部分客户 -> 在这里我想要 "my network" + "found my clients".

非常感谢任何帮助!

看起来 udpipe 在 "context" 方面比 kwic 更有意义。如果句子级别、引理和限制词类型就足够了,它应该相当直截了当。 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=", "))

在快速测试中,预建模型将 network 和 networking 定义为独立的根词条,因此一些粗略的词干提取器可能会更好地工作。但是,我确实确保在句子中包含网络会创建新的匹配项。

                    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

完全有可能通过从匹配的词条索引上下移动来找到前后单词作为上下文,但这感觉更接近 kwic 已经在做的事情。我没有包括动态同时出现的制表和排序,但我想现在提取上下文词时它应该是相当微不足道的部分。我认为它可能需要一些停用词等,但这些应该随着数据的增加而变得更加明显。