我有一个历时性语料库,其中包含不同组织的文本,每个文本的年龄为1969年至2019年。对于每个组织,我想比较1969年的文字和1970、1970和1971等的文字。几年的文本丢失了。
换句话说,
我有一个语料库cc,我将其转换为dfm现在我要使用textstat_simil
:
ncsimil <- textstat_simil(dfm.cc,
y = NULL,
selection = NULL,
margin = "documents",
method = "jaccard",
min_simil = NULL)
这会将每个文本与其他每个文本进行比较,从而产生2.6+万行。我真的只需要将某些文本与上面的文本进行比较,就像这样:
TextA
TextB
TextC
TextD(有NA)
TextE
所以,我希望A和B
B和C,并且(因为有些具有NA值)
D和E
我对textstat_simil中的y =
感到好奇
Quanteda包裹说
“ y是一个可选目标矩阵,与x的边距匹配,相似度或距离将被计算。“
我不清楚这是什么意思。
这是否意味着我可以创建两个不同的数据帧
A
B
C
D
E
和
B
C
D
E
F
这样我将获得[]的相似度统计信息>
A和B
B和C
依此类推?
或者还有更好的方法吗?
编辑从这里开始...我转换为data.frame:
df <- convert(dfm.cc, to = "data.frame")
我做了bind_cols来添加docvar和令牌计数(2,405列-短文本)。
我已经隔离了系列中的初始文本,例如
OrgA 1970,1st_in_Series_Yes,TokCount 1 ...等。>
OrgA 1971,1st_in_Series_No,TokCount 1 ...等。>
OrgA 1972,1st_in_Series_No,TokCount 1 ...等。>
OrgA 1973,NA
OrgA 1974,1st_in_Series_Yes,TokCount 1 ...等。>
OrgZ 1975,1st_in_Series_No,TokCount 1 ...等。>
以免比较
[OrgA 1973不适用,OrgA 1972不适用
或
OrgA 1974和OrgA 1973
手动计算Jaccard应该可以在这里工作,但是可能有更聪明的方法。请分享解决方案。谢谢。
我有一个历时性语料库,其中包含不同组织的文本,每个文本的期限为1969年至2019年。对于每个组织,我想比较1969年的文本和1970、1970和1971年的文本等。文本...
] >
有趣的问题。我没有可复制的示例,但是我想我可以使用内置的第一语言集数据集创建一个示例。在这里,我将文档变量Year
用作时间变量,并将唯一的总裁(全名)姓名用作您的组织的类比(因为您不希望对不同组织进行年度比较。因此,如果将您的组织和时间变量替换为下面的变量应该起作用。
请注意,我将外部的“循环”设置为lapply,而内部的则为实际的循环,但是有一些巧妙的方法可以使内部的部分也变为lapply。为了简单起见,这里将其保留为for循环。
[首先,请使用唯一的名称,因为有些(不同的)总裁共享相同的姓氏。
library("quanteda")
## Package version: 2.0.1
data_corpus_inaugural$president <- paste(data_corpus_inaugural$President,
data_corpus_inaugural$FirstName,
sep = ", "
)
head(data_corpus_inaugural$president, 10)
## [1] "Washington, George" "Washington, George" "Adams, John"
## [4] "Jefferson, Thomas" "Jefferson, Thomas" "Madison, James"
## [7] "Madison, James" "Monroe, James" "Monroe, James"
## [10] "Adams, John Quincy"
simpairs <- lapply(unique(data_corpus_inaugural$president), function(x) {
dfmat <- corpus_subset(data_corpus_inaugural, president == x) %>%
dfm(remove_punct = TRUE)
df <- data.frame()
years <- sort(dfmat$Year)
for (i in seq_along(years)[-length(years)]) {
sim <- textstat_simil(
dfm_subset(dfmat, Year %in% c(years[i], years[i + 1])),
method = "jaccard"
)
df <- rbind(df, as.data.frame(sim))
}
df
})
现在,当我们加入他们时,您可以看到我们只计算了我们需要的。
do.call(rbind, simpairs)
## document1 document2 jaccard
## 1 1789-Washington 1793-Washington 0.09250399
## 2 1801-Jefferson 1805-Jefferson 0.20512821
## 3 1809-Madison 1813-Madison 0.20138889
## 4 1817-Monroe 1821-Monroe 0.29436202
## 5 1829-Jackson 1833-Jackson 0.20693928
## 6 1861-Lincoln 1865-Lincoln 0.14055885
## 7 1869-Grant 1873-Grant 0.20981595
## 8 1885-Cleveland 1893-Cleveland 0.23037543
## 9 1897-McKinley 1901-McKinley 0.25031211
## 10 1913-Wilson 1917-Wilson 0.21285564
## 11 1933-Roosevelt 1937-Roosevelt 0.20956522
## 12 1937-Roosevelt 1941-Roosevelt 0.20081549
## 13 1941-Roosevelt 1945-Roosevelt 0.18740157
## 14 1953-Eisenhower 1957-Eisenhower 0.21566976
## 15 1969-Nixon 1973-Nixon 0.23451777
## 16 1981-Reagan 1985-Reagan 0.24381368
## 17 1993-Clinton 1997-Clinton 0.24199623
## 18 2001-Bush 2005-Bush 0.24170616
## 19 2009-Obama 2013-Obama 0.24739195
为了计算相似性,您可能想在dfm创建行中添加更多选项-我只在这里删除了标点符号,但如果需要的话,您也可以删除停用词,数字等。