Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获取提取单词的上下文_R_String_Stringr_Stringi - Fatal编程技术网

R 获取提取单词的上下文

R 获取提取单词的上下文,r,string,stringr,stringi,R,String,Stringr,Stringi,我从句子的数据框架中提取了关键词。我需要得到一些字前和后关键字,以了解上下文,并能够做一些基本的计数 我已经尝试了多个stringr和stringi函数以及其他人建议的grepl函数,以解决类似的问题。然而,没有找到任何适合我的情况 下面是我想要的。假设它是一个dataframe或TIBLE,其中列出了前两个字段。我需要/想要创建最右边的列(关键字w\u上下文) 在这个例子中,我拉三个字,继续关键字。但是,我想修改任何解,这样我就可以得到1,2,n。如果我能用同样的方式写博文也会很好 基本上,想

我从句子的数据框架中提取了关键词。我需要得到一些字前和后关键字,以了解上下文,并能够做一些基本的计数

我已经尝试了多个stringr和stringi函数以及其他人建议的grepl函数,以解决类似的问题。然而,没有找到任何适合我的情况

下面是我想要的。假设它是一个dataframe或TIBLE,其中列出了前两个字段。我需要/想要创建最右边的列(关键字w\u上下文)

在这个例子中,我拉三个字,继续关键字。但是,我想修改任何解,这样我就可以得到1,2,n。如果我能用同样的方式写博文也会很好

基本上,想要做一些事情,比如在关键字周围创建一个新的变量,并使用上下文单词(before/after,见下文)

判决 关键词 关键字w\u上下文 黄色的实验狗真可爱。 狗 黄色的实验狗 毛茸茸的黑猫大声呼噜。 猫 毛茸茸的黑猫
您可能希望采用自然语言处理(NLP)方法,而不是基于正则表达式的方法。这方面有很多框架。一个非常简单的方法是
tidytext
。下面是一个关于如何抓住关键字周围的一堆单词的示例

你可能会想玩这个游戏来得到你想要的。听起来你想从中得到一些东西,所以我选择了一个

库(tidytext)
图书馆(dplyr)
图书馆(tibble)
df%
unnest_标记(“三角形”,句子,标记=“ngrams”,n=3,n_min=2)%>%
unnest_标记(“字”、三元、drop=FALSE)%>%
左联合(关键字,by=“word”)%>%
过滤器(关键字)
#一个tible:10 x 4
rowid三元字关键字
1 1条黄色的实验狗是真的
2 1实验狗真的
3 1实验狗是真的吗
狗是真的吗
狗是如此的真实
6.2毛茸茸的黑猫真的
7.2黑猫是真的
8.2黑猫呼噜呼噜,真猫
9.2猫咪咕噜叫猫咪真
10 2只猫发出大声的呼噜声猫是真的
下面是如何在此基础上构建的示例。在这里,您可以从找到的每个单词的n-gram中跟踪哪个句子和位置。因此,您可以筛选关键字是第一个单词的位置

df%>%
行id到列(“句子id”)%>%
unnest_标记(“trigram”,句子,token=“ngrams”,n=3,n_min=3)%>%
行id到列(“三元id”)%>%
unnest_标记(“字”、三元、drop=FALSE)%>%
分组依据(三元id)%>%
变异(单词位置=行编号())%>%
左联合(关键字,by=“word”)%>%
重新定位(句子id、三角图id、单词pos、三角图、单词)%>%
过滤器(关键字,单词位置==1)
#一个tible:2 x 6
#组别:三联图[2]
句子\u id trigram\u id word\u pos trigram word关键字
狗是如此的真实
2 2 9 1猫咪大声呼噜猫咪真

谢谢你,jvargh7。这与表中的内容不匹配。但是,正如我在问题文本中指出的,我需要能够将其修改为关键字的前2个单词、前3个单词等。现在,这是在关键字之前提取所有内容。有没有一个简单的编辑来实现这一点?你现在可以试试吗?更改不同结果的“n”再次感谢你,jvargh7。我感谢你抽出时间来帮助我找到解决办法。我无法让代码正常工作。它对某些行有效,但对其他行无效。我不明白为什么。再次感谢你,没问题。亚当的解决方案好多了。谢谢你,亚当。我还没有想到一个新的方法。这很好用!
dat = read.table(text = 'Sentence   | Keyword | Keyword_w_context
The yellow lab dog is so cute.|dog|The yellow lab dog
The fluffy black cat purrs loudly.|cat|The fluffy black cat',sep="|",header=TRUE)

    
n_before = 3
n_after = 2


# Note: This will give an error if you don't have enough words before or after
dat %>% 
  mutate(Keyword_w_context_before = str_extract(string=Sentence,
                                              pattern=paste0("(([A-Za-z]+)\\s){",n_before,"}",Keyword)),
         
         Keyword_w_context_after = str_extract(string=Sentence,
                                               pattern=paste0(Keyword,"(\\s([A-Za-z]+)){",n_after,"}"))
         )


                            Sentence Keyword    Keyword_w_context Keyword_w_context_before Keyword_w_context_after
1     The yellow lab dog is so cute.     dog   The yellow lab dog       The yellow lab dog               dog is so
2 The fluffy black cat purrs loudly.     cat The fluffy black cat     The fluffy black cat        cat purrs loudly