首页 > 解决方案 > 读取具有异常分隔符的文本文件

问题描述

我正在使用一种算法来对文本向量进行词形还原。输出是一个 .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

想要的结构:

da      da 
dette   dette
er  være
den den

标签: rtextlemmatizationread-data

解决方案


这是一个有趣的结果:您可以使用 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

使用 packagesdplyrtidyr,我们可以将其解包为:

(y <- x %>% mutate(a=grepl('<', V1, fixed=TRUE), b=cumsum(a)) %>% 
  group_by(b) %>% 
  summarise(verbs=list(t(unique(V1)))) %>% 
  unnest(cols=c(verbs)))
# A tibble: 4 x 2
      b verbs[,1] [,2] 
  <int> <chr>     <chr>
1     1 <da>      da   
2     2 <dette>   dette
3     3 <er>      være 
4     4 <den>     den  

result <- y$verbs
 result[,1] <- gsub('(<|>)', '', result[,1])


    [,1]    [,2]   
[1,] "da"    "da"   
[2,] "dette" "dette"
[3,] "er"    "være" 
[4,] "den"   "den"

推荐阅读