r - 读取具有异常分隔符的文本文件
问题描述
我正在使用一种算法来对文本向量进行词形还原。输出是一个 .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
解决方案
这是一个有趣的结果:您可以使用 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
使用 packagesdplyr
和tidyr
,我们可以将其解包为:
(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"
推荐阅读
- entity-framework - EdmGen 不支持 .Net Framework 4.7.2 版
- c# - 如何获取SSRS中开始日期和结束日期之间差异的平均值
- elasticsearch - 在 Elasticsearch 中推广结果
- java - 了解第三方库的测试和编译依赖
- internet-explorer - 如何在 IE 浏览器的 mat-datepicker 中修复两位数的年份?
- javascript - 硒承诺{
} 同时期望返回一个字符串 - java - 包含自动装配依赖项的 Mockbean
- mysql - 具有未索引的列条件的Mysql大型数据集查询
- c - 减少 C 函数中的参数数量
- c# - c# 自定义异常