我正在研究R中包含俄语问询的语料库。在每个问题的开头都有写的人的名字。
举例:
总统。 - 你是Nikolai Khvostov吗?
对于这些询问的分析,我想在它们出现在行的开头时(即,当它们用于识别说话者时)删除这些名称,但是当它们出现在文本的中间时(即,当说话者实际上说那个名字)。因此,随后会有一个特定的标点符号。
我尝试了以下代码:
corpus3 <- tm_map(corpus2, removeWords, c("Председатель. —", "Хвостов. -"))
要么
corpus3 <- tm_map(corpus2, removeWords, c("President. —", "Khvostov. -"))
但没有删除,如果我尝试:
corpus3 <- tm_map(corpus2, removeWords, c("President", "Khvostov"))
总统和Khvostov的所有条款都被删除。但是当我们在干预期间使用这些名称时,我需要使用这些名称。
我的意思是通过例子:
输入字符串:
总统。 - 你是Nikolai Khvostov吗?
赫沃斯托夫。 - 是的,总统先生。
期望的输出:
你是Nikolai Khvostov吗?
是的,总统先生。
第三个代码块生成的不需要的输出:
你是尼古拉?
是先生..
我的数据有一个例子:用文字很容易做到这一点,但实际上我有超过5000页的询问问题我想学习。 Word无法在不破坏我的计算机的情况下打开文档。这就是为什么我希望代码匹配来帮助我。我的数据在R中添加为大型VCorpus
主席。 - 阿列克谢·尼古拉耶维奇,你已经在3月15日被审讯了一次 - 不是吗?
尾巴。 - 是的
主席。 “你知道你正在参加特别调查委员会的会议吗?”
尾巴。 - 是的
主席。 - 我会问你,不要因为你的审讯而感到尴尬,要告诉我们你所知道的国家杜马和内政部长的一切,关于前部长和其他高级官员的行动我们的调查我们忙。当然,我们也对你提到Korovichenko先生的证词的主题感兴趣,即那些站在政府旁边或者可能背后的政治圈子的主题,并且具有一定的影响力。这个话题需要加深......特别是,我们要求您详细说明以下内容:在您的活动中,您是否经历过,在多大程度上以及在何种情况下,您已经作证的这些圈子的压力是什么?这是画布......请开始。
尾巴。 “我必须报告,我完全确认了我在证词中已经给出的所有内容。”事实上,我认为这一证词是我的责任,它不与内政部长职位的官员和委托给我的事务有关,而只是发现了这一点,而不是直接内政部长的任务......
主席。 “我不理解你的想法......我们在这里不能有任何秘密:你不仅在正确的方面,而且你必须向我们展示你所知道的一切。”
尾巴。 - 除了依职权分配给我的职责外,我还受到俄罗斯人的责任指导,因为这个问题涉及我的痛处 - 我的意思是间谍问题......
主席。 - 你能按顺序告诉我:你在什么情况下被任命为内政部长?这是第一次... [3]
尾巴。 “也许你会允许我把它深化一点?”你不得不说我必须先展示我之前作为国家杜马成员所知道的东西......很久以前,作为国家杜马的一员,我提请注意德国的影响,在我看来,这种影响是在政府中。我很忙......
主席。 - 你什么时候注意到这个?
尾巴。 - 作为国家杜马的成员,几乎在我到达彼得格勒的最初阶段 - 在1912年......在此之前,对我来说,作为各省的仆人,应该遗漏对彼得格勒领域的这些或其他影响......我唯一一次见面拉斯普京,当我担任州长时,这是在下诺夫哥罗德。拉斯普京当时来到我身边,对我来说很少有人知道,我听到的是以传闻到达该省的形式。他向我提出了内政部长的职位。我记得,在Stolypin被谋杀前一周或十天。我对他的外表感到惊讶,并没有附上后来发现的意义......我对Stolypin离开的可能性感到非常惊讶,因为在我们看来,Stolypin是一个无可争议的力量,他似乎不可能犹豫,错开或离开...... Rasputin宣布对我来说,他应该和我说话,因为他被告知,“看到我的灵魂”......
主席。 - 谁发送?
尾巴。 - 不确定地:从Tsarskoye派来 - 看到我的灵魂......在我看来,当时没有经验,有点好笑,我开玩笑地说话,然后,过了一会儿,我派警察局长把他带到车站。 Rasputin离开了......
主席。 “你说,你觉得这件事发生在内政部长的生活中,”你是否对此表示怀疑?
尾巴。 - 我表示怀疑。他说Stolypin应该离开。但是,说实话,我并没有认真地和他说话......我认为他是Tsarskoye Selo的精神娱乐之一,但我并不认为这是严肃的,所以他可以改变部长的任命......我知道他当时对待我前皇帝尼古拉斯二世非常支持......当我在沃洛格达担任州长时,他与我的第一次良好关系开始,并报道了通过乌拉尔将沃洛格达河与西伯利亚连接起来的可能性。我大多推动这种情况。他对此非常感兴趣,我经常给他的报告在经济前景方面比当时在俄罗斯做的任何其他事情都更加乐观。这就是我引起他对自己的注意...... [4]倒数第二次,在拉斯普京到达之前,我坐在主权人面前,被认为是善意的最高标志。谈话是关于共同的主题。
主席。 - 那次拉斯普京访问之前的最后一次是你在Tsarskoye吗?
尾巴。 “我不记得确切,但是大约一个半月......我从亲密的人那里知道,我一直在谈论狩猎......但Rasputin的这次访问给我留下了非常深刻的印象,我没有对此做出反应认真。在那之后,我必须已经在Tsarskoye ......
主席。 - 阿列克谢·尼古拉耶维奇,你说你对这一到来的态度是消极的;但这并不能减轻我们更详细地讨论它的必要性:Rasputin只针对此吗?
尾巴。 “专属于此。”
主席。 - 你之间还有什么其他的对话?
尾巴。 “这是唯一的对话。”他说:“我来看你的灵魂”......
主席。 - T .-。e。只是这几句话?
尾巴。 “他还表示希望看到我的家人......我的家人还没有......我认为没有必要把他介绍给我的家人。”我没有认真对待......有一个公平:它结束了。我没跟他说话。我非常轻松......在一个月之后,我来到这里,我看到了一种完全相反的态度。我受到了最高程度的敌意,非常干燥,在之前的接待之后,在我看来异常愉快。这是当时看起来很奇怪的基础:我离开了省,去了国家杜马......我不能马上离开,过了不错的时间,大约一年:但无论如何,在这段时间里,我尽一切可能到达那里在奥廖尔省的国家杜马,我的所有想法都已经离开了 - 看到这里所有进一步的道路都被切断了......
主席。 - 什么,离开,Rasputin对你的地址有任何威胁?
尾巴。 - 照常聊天:他说他已经发了一封关于我的电报。
主席。 - 什么内容?
尾巴。 - 我根本不记得细节中的内容......然后我得到了文本(邮局里总有人然后给出了详细的内容)。但我不记得文字了。
主席。 - 大概是什么内容? [5]
尾巴。 - 对我的消极态度......这样的事情:“虽然上帝依赖它,但缺少某些东西”......
主席。 - 再次告诉我:他是否代表他来自Tsarskoye Selo - 来自放弃的君主还是来自君主?
我的代码的开头是:
## Package ##
library(tm)
library(NLP)
library(slam)
library(FactoMineR)
library(explor)
library(R.temis)
library(zoo)
library(lattice)
library(RcmdrPlugin.temis)
library(tidyverse)
## Importation du corpus
corpus <- import_corpus("./data/CorpusPadenie", format = "txt", language = "ru")
## Importation metadonnees
don <- read.csv2("./data/2019_PDI_M1_MEM_DATA_DOP.csv")
## Association des metadonnees et du corpus
corpus <- set_corpus_variables(corpus, don)
corpus
## Creation d'une copie de secours
corpus2 <- corpus
### Suppression des mots inutiles ###
## Suppressions des noms des intervenants - pour pouvoir identifier les noms utiliser dans les interogatoires - suprressions des seuls intervenants possible du fait de la mise en page.
corpus3 <- tm_map(corpus2, removeWords, c("Председатель. —", "Хвостов"))
removeWords(corpus2[[1]], character(c("Председатель. —", "Хвостов. —")))
corpus2[[1]]
removeWords(corpus2[[1]], "Председатель")
writeCorpus(corpus2, path = "./data/Test", filenames = NULL)
dput结果的最后一部分(head(corpus2))
"1917_08_21_TCHESSKA_7_79_POK_F_A_GOLOVIN.txt", "1917_08_25_TCHESSKA_7_80_DOP_A_A_POLIVANOV.txt",
"1917_08_25_TCHESSKA_7_81_DOP_V_N_KOKOVTSOV.txt", "1917_09_04_TCHESSKA_7_83_DOP_M_V_RODZIANKO.txt",
"1917_09_20_TCHESSKA_7_84_DOP_A_A_POLAVINOV.txt", "1917_09_27_TCHESSKA_7_85_DOP_N_B_CHTCHERBATOV.txt",
"1917_09_27_TCHESSKA_7_86_POK_A_P_LEDNITSKIJ.txt", "1917_10_11_TCHESSKA_7_87_DOP_A_B_LIADOV.txt",
"1917_10_11_TCHESSKA_7_88_DOP_D_S_CHOUVAEV.txt"), class = "factor"),
int_id = structure(1:6, .Label = c("1", "2", "3", "4",
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
"15", "16", "17", "18", "19", "20", "21", "22", "23",
"24", "25", "26", "27", "28", "29", "30", "31", "32",
"33", "34", "35", "36", "37", "38", "39", "40", "41",
"42", "43", "44", "45", "46", "47", "48", "49", "50",
"51", "52", "53", "54", "55", "56", "57", "58", "59",
"60", "61", "62", "63", "64", "65", "66", "67", "68",
"69", "70", "71", "72", "73", "74", "75", "76", "77",
"78", "79", "80", "81", "82", "83", "84", "85", "86"), class = "factor"),
ind_id = structure(1:6, .Label = c("1", "2", "3", "4",
"5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
"15", "16", "17", "18", "19", "20", "21", "22", "23",
"24", "25", "26", "27", "28", "29", "30", "31", "32",
"33", "34", "35", "36", "37", "38", "39", "40", "41",
"42", "43", "44", "45", "46", "47", "48", "49", "50",
"51", "52", "53", "54", "55", "56", "57", "58", "59",
"60"), class = "factor"), ind_nom = structure(c(23L,
24L, 43L, 22L, 52L, 9L), .Label = c("Andronikov", "Beletskij",
"Belyaev", "Bourtsev", "Chingerev", "Chouvaev", "Chtcheglovitov",
"Chtcherbatov", "Chtiourmer", "Djounkovskij", "Dobrovilskij",
"Doubenskij", "Frederiks", "Golitsyn", "Golovin", "Goremykin",
"Goutchkov", "Guerassimov", "Ignatev", "Ivanov", "Kafafov",
"Khabalov", "Khvostov", "Klimovitch", "Kokovtsov", "Komissarov",
"Kourlov", "Kryjanovskij", "Lednitskij", "Liadov", "Lodyjenskij",
"Lokhtina", "Makarov", "Maklakov", "Manassievitch-Manoujlov",
"Markov", "Milioukov", "Naoumov", "Neratov", "Pleve",
"Pokrovskij", "Polivanov", "Protopopov", "Rejn", "Rejnbot",
"Rodzianko", "Spiridovitch", "Tchaplin", "Tchelnokov",
"Tchkhejdze", "Trousevitch", "Vassiliev", "Velepolskij",
"Verevkin", "Vissarionov", "Voejkov", "Volkonskij", "Vyroubova",
"Zolotarev"), class = "factor"), ind_initiales = structure(c(5L,
12L, 3L, 39L, 7L, 9L), .Label = c("AA", "AB", "AD", "AI",
"AN", "AP", "AT", "AV", "BV", "DN", "DS", "EK", "FA",
"GE", "IF", "IG", "IL", "IM", "IN", "KD", "MA", "MI",
"MM", "MS", "MV", "NB", "ND", "NE", "NI", "NN", "NS",
"NV", "OA", "PG", "PN", "SE", "SI", "SP", "SS", "VB",
"VF", "VL", "VM", "VN"), class = "factor"), int_mois = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("3", "4", "5", "6", "7",
"8", "9", "10"), class = "factor"), int_jour = structure(c(15L,
16L, 18L, 19L, 19L, 19L), .Label = c("1", "2", "4", "6",
"7", "8", "9", "10", "11", "12", "13", "14", "15", "17",
"18", "19", "20", "21", "22", "24", "25", "26", "27",
"28", "29", "30", "31"), class = "factor"), int_tome = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("1", "2", "3", "5", "6",
"7"), class = "factor"), int_num = structure(1:6, .Label = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
"13", "14", "15", "16", "17", "18", "19", "20", "21",
"22", "23", "24", "25", "26", "27", "28", "29", "30",
"31", "32", "33", "34", "35", "36", "37", "38", "39",
"40", "41", "42", "44", "45", "46", "47", "48", "49",
"50", "51", "52", "53", "54", "55", "56", "57", "58",
"59", "60", "61", "62", "63", "64", "65", "66", "67",
"68", "69", "70", "71", "72", "73", "74", "75", "76",
"77", "78", "79", "80", "81", "83", "84", "85", "86",
"87", "88"), class = "factor"), dop_pok = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("DOP", "POK"), class = "factor")), row.names = c(NA,
6L), class = "data.frame")), class = c("VCorpus", "Corpus"
))
有几种方法可以做到这一点。使用sub
只会用您指定的任何内容替换第一场比赛。 gsub
将取代每个实例。您还可以查看包含stringi
的软件包,它具有此类任务的多种功能。下面的示例匹配第一个破折号之前的所有内容(后面有一个空格)并用“”替换它。如果你想保守一点,你可以删除后面的空格并使用trimws
,如果在第一个破折号后有一个不一致的间距模式。
sub((".* \\- "), "", c("President. - Are you Nikolaj Khvostov?", "Khvostov. - Yes Mr. President."))
[1] "Are you Nikolaj Khvostov?" "Yes Mr. President."
编辑:
如果不能更好地理解您的数据,我们只是在猜测,这就是为什么在R中有一个数据示例非常有用。但是,从理论上讲,这些解决方案可能会根据您的数据结构而有效。
如果它是一个列表,这应该工作:
text_as_list <- list("President. — Are you Nikolaj Khvostov?", "Khvostov. — Yes Mr. President.")
lapply(text_as_list, sub, pattern = "^.* \\— ", replacement = "")
[[1]]
[1] "Are you Nikolaj Khvostov?"
[[2]]
[1] "Yes Mr. President."
如果它是一个长向量,这应该工作(现在使用gsub
):
long_vector <- c("President. — Are you Nikolaj Khvostov?\nKhvostov. — Yes Mr. President.")
cat(long_vector)
President. — Are you Nikolaj Khvostov?
Khvostov. — Yes Mr. President.
long_vector_fixed <- gsub(("Khvostov. \\— "), "", gsub(("President. \\— "), "", long_vector))
cat(long_vector_fixed)
Are you Nikolaj Khvostov?
Yes Mr. President.
使用您使用的tm_map
函数的可能解决方案:
tm_map(corpus2, sub, pattern = "^.* \\— ", replacement = "")
就像在评论中所说的那样 - 不知道你的数据结构会让你更难以帮助你。在下面的示例中,我在第一步中创建了一些示例数据。
library(tidyverse)
#Create some sample data
data <- tibble(
text = c("President. - Are you Nikolaj Khvostov?",
"Khvostov. - Yes Mr. President."))
#A print of the sample data
data
#Create a variable called "new_text" using the mutate() function
#The function str_remove() from the stringr package is used to remove the unwnted elements
data %>%
mutate(
new_text = str_remove(text, pattern = "^[a-zA-Z]+\\. -"))
替换字符串的R函数是gsub("Pattern_to_find", "replacement", string_vector_to_work_on)
。干杯