R 使用异常定界符读取文本文件

R 使用异常定界符读取文本文件,r,text,lemmatization,read-data,R,Text,Lemmatization,Read Data,我正在使用一种算法对文本向量进行柠檬化。输出是一个以下图所示方式存储的.txt文件。 原始单词列在第一列,而各种引理列在第二列,然后是一些语法分类。我想把这个读入R,但不知道怎么做。我试过各种形式的分离器,但似乎都不起作用 理想情况下,我希望R中的数据框如下所示,其中我只读取每个引理的第一次出现: 也许最好的选择是读取数据,只保留第一次出现的数据(即da da adv),然后执行类似于文本到列的操作,只保留前两列 柠檬化算法的输出: "<da>" "da" adv

我正在使用一种算法对文本向量进行柠檬化。输出是一个以下图所示方式存储的.txt文件。

原始单词列在第一列,而各种引理列在第二列,然后是一些语法分类。我想把这个读入R,但不知道怎么做。我试过各种形式的分离器,但似乎都不起作用

理想情况下,我希望R中的数据框如下所示,其中我只读取每个引理的第一次出现:

也许最好的选择是读取数据,只保留第一次出现的数据(即da da adv),然后执行类似于文本到列的操作,只保留前两列

柠檬化算法的输出:

"<da>"
    "da" adv
    "da" sbu
    "da" subst fork
"<dette>"
    "dette" det dem nøyt ent
    "dette" pron nøyt ent pers 3
    "dette" verb inf
"<er>"
    "være" verb pres <aux1/perf_part>
"<den>"
    "den" det dem fem ent
    "den" det dem mask ent
    "den" pron mask fem ent pers 3

下面是一个有趣的结果:使用read.table可以很好地读取文件:

s <- '"<da>"
    "da" adv
    "da" sbu
    "da" subst fork
"<dette>"
    "dette" det dem nøyt ent
    "dette" pron nøyt ent pers 3
    "dette" verb inf
"<er>"
    "være" verb pres <aux1/perf_part>
"<den>"
    "den" det dem fem ent
    "den" det dem mask ent
    "den" pron mask fem ent pers 3
 '

 x <- read.table(sep='', text=s, colClasses=c('character','character'), flush=TRUE, fill=TRUE)

> x
        V1    V2   V3
1     <da>           
2       da   adv     
3       da   sbu     
4       da subst fork
5  <dette>           
6    dette   det  dem
7    dette  pron nøyt
8    dette  verb  inf
9     <er>           
10    være  verb pres
11   <den>           
12     den   det  dem
13     den   det  dem
14     den  pron mask

下面是一个有趣的结果:使用read.table可以很好地读取文件:

s <- '"<da>"
    "da" adv
    "da" sbu
    "da" subst fork
"<dette>"
    "dette" det dem nøyt ent
    "dette" pron nøyt ent pers 3
    "dette" verb inf
"<er>"
    "være" verb pres <aux1/perf_part>
"<den>"
    "den" det dem fem ent
    "den" det dem mask ent
    "den" pron mask fem ent pers 3
 '

 x <- read.table(sep='', text=s, colClasses=c('character','character'), flush=TRUE, fill=TRUE)

> x
        V1    V2   V3
1     <da>           
2       da   adv     
3       da   sbu     
4       da subst fork
5  <dette>           
6    dette   det  dem
7    dette  pron nøyt
8    dette  verb  inf
9     <er>           
10    være  verb pres
11   <den>           
12     den   det  dem
13     den   det  dem
14     den  pron mask

当复制将文本粘贴到文本文件中时,这对我起到了作用:

#Read the data
data <- readLines('temp.txt')
#index where new group starts. I have considered no whitespace at the beginning
# of the string as an indication for new group.
groups <- !startsWith(data, ' ')
#Since the first word is same in the entire group, we take first word 
#from 2nd element as 1st element is group name
value <- tapply(data, cumsum(groups), function(x) 
                     sub('"(\\w+).*', '\\1', trimws(x[2])))
#Create dataframe with group name and value. 
data.frame(groups = data[groups], value)


#    groups value
#1    "<da>"    da
#2 "<dette>" dette
#3    "<er>"  være
#4   "<den>"   den
#读取数据

数据当复制将文本粘贴到文本文件时,这对我有效:

#Read the data
data <- readLines('temp.txt')
#index where new group starts. I have considered no whitespace at the beginning
# of the string as an indication for new group.
groups <- !startsWith(data, ' ')
#Since the first word is same in the entire group, we take first word 
#from 2nd element as 1st element is group name
value <- tapply(data, cumsum(groups), function(x) 
                     sub('"(\\w+).*', '\\1', trimws(x[2])))
#Create dataframe with group name and value. 
data.frame(groups = data[groups], value)


#    groups value
#1    "<da>"    da
#2 "<dette>" dette
#3    "<er>"  være
#4   "<den>"   den
#读取数据

数据您好,将数据作为图像并不是共享它们的最佳方式:因为它们是在.txt中,您可以将示例粘贴为文本(等于:空格等),以便可以将其复制并粘贴到.txt中,并在我们的计算机中创建您的情况。感谢您的评论,您当然完全正确。。。我现在已经更新了问题。你的文本与你的图像不匹配。。。哪一个是正确的?我认为它们现在应该匹配…嗨,将数据作为图像并不是共享它们的最佳方式:因为它们是在.txt中,您可以将示例粘贴为文本(等于:空格等),以便可以将其复制并粘贴到.txt中,并在我们的计算机中创建您的情况。谢谢您的评论,你当然是完全正确的。。。我现在已经更新了问题。你的文本与你的图像不匹配。。。哪一个是正确的?我想他们现在应该匹配了…非常好的导入,比我的更简单。请获得我的支持。这是一个非常优雅的解决方案,谢谢!但是,在运行第二部分(mutate等)时,我收到了以下错误消息:vec\u rbind(!!!x,.ptype=ptype)中的错误:
vec\u assign()
应该循环使用以适应
x
。对如何解决这个问题有什么建议吗?我对R还比较陌生,所以非常感谢您的帮助!我可以用与你建议相同的直觉找到一个解决方法,但使用聚合。非常感谢你的帮助!非常好的导入,比我的更简单,请获得我的支持。这是一个非常优雅的解决方案,谢谢!但是,在运行第二部分(mutate等)时,我收到了以下错误消息:vec\u rbind(!!!x,.ptype=ptype)中的错误:
vec\u assign()
应该循环使用以适应
x
。对如何解决这个问题有什么建议吗?我对R还比较陌生,所以非常感谢您的帮助!我可以用与你建议相同的直觉找到一个解决方法,但使用聚合。非常感谢你的帮助!