我想使用R的list.files函数来查找文件夹及其子文件夹中的所有文本文件.但是,我想排除一个子文件夹中的所有文件,假设它包含未完成的工作,而这些工作还没有为我使用其他文件的内容做好准备.结构是这样的:
- folder
|- subfolder_1_good_stuff
|- subfolder_2_good_stuff
|- subfolder_3_good_stuff
|- subfolder_4_unfinished_stuff
Run Code Online (Sandbox Code Playgroud)
所以"文件夹"将是我的工作目录.
我现在用:
list.files(path=".", pattern=".txt", recursive=TRUE)
Run Code Online (Sandbox Code Playgroud)
但是我应该添加到"路径"表达式以排除具有未完成内容的文件夹.此文件夹名称不会出现在任何文件名中,如果这有所不同.
我有一堆XML文件和一个R脚本,可以将其内容读入数据框.但是,我现在得到了我想像往常一样解析的文件,但是它们的命名空间定义中有些东西不允许我通常使用XPath表达式选择它们的值.
XML文件是这样的:
xml_nons.xml
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<Node>
<Name>Name 1</Name>
<Title>Title 1</Title>
<Date>2015</Date>
</Node>
</XML>
Run Code Online (Sandbox Code Playgroud)
和另外一个:
xml_ns.xml
<?xml version="1.0" encoding="UTF-8"?>
<XML xmlns="http://www.nonexistingsite.com">
<Node>
<Name>Name 2</Name>
<Title>Title 2</Title>
<Date>2014</Date>
</Node>
</XML>
Run Code Online (Sandbox Code Playgroud)
xmlns指向的URL不存在.
我使用的R代码是这样的:
library(XML)
xmlfiles <- list.files(path = ".",
pattern="*.xml$",
full.names = TRUE,
recursive = TRUE)
n <- length(xmlfiles)
dat <- vector("list", n)
for(i in 1:n){
doc <- xmlTreeParse(xmlfiles[i], useInternalNodes = TRUE)
nodes <- getNodeSet(doc, "//XML")
x <- lapply(nodes, function(x){ data.frame(
Filename = xmlfiles[i],
Name = xpathSApply(x, ".//Node/Name" , xmlValue),
Title …
Run Code Online (Sandbox Code Playgroud) 我需要学习如何将文本的音译更改为另一种书写系统。显然,最好的方法是以某种方式涉及正则表达式和 perl,可能是从命令行?我之前已经在 Notepad++ 和 TextWrangler 中使用过正则表达式,所以我已经了解了一些基础知识。如果有一些非常好的(并且相对简单和可定制的)方法可以在 Ruby 或其他东西中做到这一点,我也可以开始学习。在我的乌拉尔语言学领域,经常需要音译语言样本文本,其中使用了许多不同的音译系统变体。所以值得投入一些时间。
\n\n所以我现在拥有的材料由每行一个句子组成。有些行有其他数据,例如数字,但这些数据应保持原样。我想保持标点符号不变,这只是将一组 unicode 字母字符转换为另一组。我搜索了该网站,但很多都是关于从 ascii 转换为 unicode 等等 - 这不是这里的问题。
\n\n所以原文是这样的(广义的芬兰-乌戈尔语转录):
\n\nm\xc3\xb6dis ivan vel\xc3\xb6\xc4\x87\xc4\x87yny pe\xc4\x87ora\xc3\xb6 \xc5\xa1c\xcc\x8c\xc3\xb6t\xc3\xb6v\xc3\xb6dnej kurs vyl\xc3\xb6.\n
Run Code Online (Sandbox Code Playgroud)\n\n我需要这样的形式:
\n\n\xd0\xbc\xd3\xa7\xd0\xb4i\xd1\x81 \xd0\xb8\xd0\xb2\xd0\xb0\xd0\xbd \xd0\xb2\xd0\xb5\xd0\xbb\xd3\xa7\xd1\x87\xd1\x87\xd1\x8b\xd0\xbd\xd1\x8b \xd0\xbf\xd0\xb5\xd1\x87\xd0\xbe\xd1\x80\xd0\xb0\xd3\xa7 \xd1\x89\xd3\xa7\xd1\x82\xd3\xa7\xd0\xb2\xd3\xa7\xd0\xb4\xd0\xbd\xd1\x8d\xd0\xb9 \xd0\xba\xd1\x83\xd1\x80\xd1\x81 \xd0\xb2\xd1\x8b\xd0\xbb\xd3\xa7.\n
Run Code Online (Sandbox Code Playgroud)\n\n这持续了几千行。
\n\n使用的字符之间有明确的对应关系,但有时很复杂,需要首先处理一些二合字母和辅音 + 元音组合等。正如您从示例中看到的,在某些情况下拉丁语 i 对应于西里尔字母 \xd0\xb8 但在某些职位可以保留为 i。不同的文本有不同的解决方案,所以我需要根据每种情况调整规则。我知道我需要以非常特定的顺序运行一长串正则表达式才能使其工作。这个顺序我会自己弄清楚,但我需要知道我将这些规则输入到什么样的工具中以及如何执行。
\n\n我也经常遇到这样的情况,我希望将原始句子和音译句子用制表符分隔开,以便各行具有如下形式:
\n\nm\xc3\xb6dis ivan vel\xc3\xb6\xc4\x87\xc4\x87yny pe\xc4\x87ora\xc3\xb6 \xc5\xa1c\xcc\x8c\xc3\xb6t\xc3\xb6v\xc3\xb6dnej kurs vyl\xc3\xb6. \xd0\xbc\xd3\xa7\xd0\xb4i\xd1\x81 \xd0\xb8\xd0\xb2\xd0\xb0\xd0\xbd \n\xd0\xb2\xd0\xb5\xd0\xbb\xd3\xa7\xd1\x87\xd1\x87\xd1\x8b\xd0\xbd\xd1\x8b \xd0\xbf\xd0\xb5\xd1\x87\xd0\xbe\xd1\x80\xd0\xb0\xd3\xa7 \xd1\x89\xd3\xa7\xd1\x82\xd3\xa7\xd0\xb2\xd3\xa7\xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb9 \xd0\xba\xd1\x83\xd1\x80\xd1\x81 \xd0\xb2\xd1\x8b\xd0\xbb\xd3\xa7.\n
Run Code Online (Sandbox Code Playgroud)\n\n当然还有很多问题,但是在学习了这些基础知识之后我认为我可以独立前进。学习这个对我有很大帮助。提前致谢!
\n\n尼科
\n最后的工作示例
我想使用knitr在LaTeX文档中包含R代码,但是当存在非ascii字符时,它无法正确打印到PDF中.情况类似于用户unikum在GitHub中提出的问题,但在那里给出的解决方案仅部分地帮助了我.
理想情况下,打印的行将在普通文本中并具有合适的LaTeX格式,特别是在结果只是一行的情况下.在我的脑海中,我有一些用途,研究论文中的例句会自动从数据文件中获取.
我在RStudio(0.98.945)中编写了Rnw文件,我使用XeLaTex进行排版.我只需单击RStudio中的Compile PDF按钮即可创建PDF .我有MacBook Pro和Mavericks.如果需要一些其他信息,请告诉我.如果有帮助,我也可以切换到其他程序(如TeXShop等).
我还在学习所有这些工具,R,knitr和LaTeX,所以如果我错过任何明显的解决方案或滥用某些术语,我会道歉.我试图将类似问题的不同解决方案结合起来,比如关于波兰人或者希伯来语的问题.有很多人在撰写有关类似问题的文章,但我仍然有问题要将它们结合在一起.我猜这是编码问题.
这是我的LaTeX序言:
\documentclass{article}
\usepackage{hyperref}
\usepackage {fontspec}
\setromanfont{Charis SIL}
<<setup, include=FALSE>>=
options(device = function(file, width = 7, height = 7, ...) {
cairo_pdf(tempfile(), width = width, height = height, ...)
})
@
Run Code Online (Sandbox Code Playgroud)
在普通文本中,我可以有任何可能的unicode字符,它们在pdf中显示正确:мичаалыддьыныпозьӧ,met'šužišurse̮kmis-šodasɛ͔dvoɛ͔šent'a·b das-e̮kmi͔sɛ͔dlunɛ.
我认为这与编码有关.
在我的例子中,我扫描到包含以下10行的文本文件(test.txt),它们只是芬兰语和科米语中的随机单词形式:
??????????
?????????
??????
sivulla
???
???????
sivu-ovi
Esko
???????
akkuna
Run Code Online (Sandbox Code Playgroud)
以下代码正确打印结果:
<<test1, echo=FALSE, comment=NA>>=
test <- scan(file="test.txt", what="char", sep="\n")
wordlat <- grep("sivu", test, value=T)
print(wordlat)
@
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
[1] …
Run Code Online (Sandbox Code Playgroud) 我有大约 100 个 XML 文件,我想将它们转换为另一个具有更好结构的文件。本示例将其转换为 CSV,但我还有一个变体,可以将其转换为更好的 XML。格式与我无关。我看到有很多这样的问题,但我发现这些例子很难适应,因为问题不是样式表不起作用而是它太慢了。
我的数据文件大小在 4-12 MB 之间。我在这里提供的 XSLT 可以很好地处理小文件。例如,当我将文件剪切为 250 KB 时,样式表可以很好地处理它(尽管这已经花费了大约 30 秒)。当我尝试处理实际较大的数据文件时,它似乎永远无法完成这项工作 - 即使只有一个文件也是如此。我有 Oxygen XML Editor,我一直在使用 Saxon-HE 9.5.1.2 进行转换。
备注:这仍然可能很慢。我可以让我的电脑过夜或做其他事情。这涉及一个格式错误的数据集,我根本不需要经常重复这种转换。
所以我的问题是:
这个 XSLT 中是否有什么东西让它运行得特别慢?其他方法会更好吗?
这些是简化的工作示例。实际的数据文件在结构上是相同的,但有更多的节点,在本例中我称之为“单词”。属性类型指定我要查找的节点。它是包含方言词及其规范化版本的语言方言数据。
这就是 XML。
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<order>
<slot id="ts1" value="1957"/>
<slot id="ts2" value="1957"/>
<slot id="ts3" value="2389"/>
<slot id="ts4" value="2389"/>
<slot id="ts5" value="2389"/>
<slot id="ts6" value="2389"/>
<slot id="ts7" value="3252"/>
<slot id="ts8" value="3252"/>
<slot id="ts9" value="3252"/>
<slot id="ts10" value="3360"/>
</order>
<words type="original word">
<annotation>
<data id_1="ts1" id_2="ts3">
<text>dialectal_word_1</text> …
Run Code Online (Sandbox Code Playgroud)