我编写了一个Ruby脚本,它正在读取File.read()包含unicode字符的文件(),并且它在命令行中运行良好.
但是,当我尝试将其放入Automator工作流程(Mac OS X)时,我收到此错误;
2009-12-23 17:55:15 -0500: /Users/jeffreyaylesworth/bin/symbols:19:in `split': invalid byte sequence in US-ASCII (ArgumentError)
(traceback)
Run Code Online (Sandbox Code Playgroud)
因此,当从Automator运行时,突然拆分不喜欢非ASCII字符.据我所知,两者都是从相同版本的Ruby运行(版本号是相同的).
我不太关心他们为什么表现不同(但如果有人知道,这很好),但我想要一个解决方案来分割接受非ASCII字符.
如果它有帮助,我需要将单个字符的文本分成两部分,所以如果与C的标记化器类似的东西可以工作,我可以使用它.
在我们的项目中,我们需要将csv文件导入postgres.有多种类型的文件意味着文件的长度会发生变化,因为某些文件的列数较少,而某些文件的列数较少.
我们需要一种快速的方法将此文件导入postgres.我想使用postgres的COPY FROM,因为处理的速度要求非常高(每分钟几乎150个文件,每个文件大小为20K).
由于文件列号不固定,我需要在将文件传递给postgres过程之前预处理该文件.预处理只是在csv中为列添加额外的逗号,这些列在文件中不存在.
我有两个选项来预处理文件 - 使用python或使用Sed.
我的第一个问题是,预处理文件的最快方法是什么?
第二个问题是,如果我使用sed如何在说第4个,第5个逗号字段后插入逗号?
例如,如果文件有像1,23,56,we,89,2009-12-06这样的条目,我需要编辑最终输出的文件,如:1,23,56,we ,, 89 ,,,2009-12-06
我希望从大文档中替换所有高级unicode字符,例如重音Es,左右引号等,以及低范围中的"普通"对应字符,例如常规"E"和直引号.我需要经常在非常大的文档上执行此操作.我在这里看到了一个这样的例子:http://www.designmeme.com/mtplugins/lowdown.txt
有没有一种快速的方法在Python中执行此操作而不使用s.replace(...).replace(...).replace(...)...?我已经尝试过几个字符来替换,文档剥离变得非常慢.
编辑,我的unutbu代码版本似乎不起作用:
# -*- coding: iso-8859-15 -*-
import unidecode
def ascii_map():
data={}
for num in range(256):
h=num
filename='x{num:02x}'.format(num=num)
try:
mod = __import__('unidecode.'+filename,
fromlist=True)
except ImportError:
pass
else:
for l,val in enumerate(mod.data):
i=h<<8
i+=l
if i >= 0x80:
data[i]=unicode(val)
return data
if __name__=='__main__':
s = u'“fancy“fancy2'
print(s.translate(ascii_map()))
Run Code Online (Sandbox Code Playgroud) 现在,我正在用分裂,切片和内爆实现这个:
$exploded = implode(' ',array_slice(preg_split('/(?=[A-Z])/','ThisIsATest'),1));
//$exploded = "This Is A Test"
Run Code Online (Sandbox Code Playgroud)
更漂亮的版本:
$capital_split = preg_split('/(?=[A-Z])/','ThisIsATest');
$blank_first_ignored = array_slice($capital_split,1);
$exploded = implode(' ',$blank_first_ignored);
Run Code Online (Sandbox Code Playgroud)
但是,问题是当你有输入时'SometimesPDFFilesHappen',我的实现将(错误地)解释为'Sometimes P D F Files Happen'.
我怎样(简单地)让我的脚本压缩'P D F'到'PDF'?
我应该分开的资格是从第一个首都开始,到最后一个结束,以适应下一个词.
是的,我知道存在一些含糊不清的内容,例如'ThisIsAPDFTest',会被解释为'This Is APDF Test'.但是,我无法想到一种"聪明"的方法来避免这种情况,因此这是一种可接受的妥协.
我需要从文本中分割单词.有时候带连字符的单词是在没有连字符的情况下编写的,撇号单词是在没有撇号的情况下写成的.还有类似的问题,例如相同单词的不同拼写问题(例如:颜色,颜色)或单个单词,它们之间用空格写入(例如:up,upto,blankspace,blank space).我需要将这些变体分组为单个表示形式,并将其插入到set/hashmap或其他位置.对于没有重音字符的重音字符单词也可能存在问题(尽管我还没有面对它们).目前,在任何空白字符和每个非字母数字处切割单词,然后将其截止,并省略停用单词.
这些索引稍后将用于文档相似性检查和搜索等.任何建议如何解决这些问题?我想到了将扫描的单词与单词表匹配的想法,但问题是专有的名词和非词典单词将被省略.
信息:我的代码是Java
我所拥有的文件有ID,model和date.文件具有类似于格式10000_9999-99_10-01-2011.zip(其中,10000是ID,9999-99是model,当然10-01-2011是date).
我想修改date这些文件的s,但保持会话之间的间隔相同ID.例如,如果2次会议有日期1/1/2011和2/1/2011,我想更新的最后一次会议日期8/1/2012,第一届会议将有日期7/1/2012.
目前我的代码如下所示:
@echo off
setlocal enabledelayedexpansion
del filedates.txt
FOR /F "tokens=1,2,3,4,5 delims=_" %%a in (filenames.txt) do @echo %%c >>filedates.txt
FOR /F "tokens=1,2,3 delims=-" %%a in (filedates.txt) do (
echo %%a%%b
)
Run Code Online (Sandbox Code Playgroud)
输出类似于此(YearMonth):
201107
201109
201204
etc..
Run Code Online (Sandbox Code Playgroud)
我想要读取一行filedates.txt,将此日期存储为变量,然后读取下一行,并将其存储为另一个变量.这样可以比较两个变量,看哪个更大,并且过程将继续.
我正在使用google-diff-match-patch来比较自然语言中的纯文本。
如何使google-diff-match-patch忽略某些字符?(一些无关紧要的细微差别。)
例如,给定text1:
give me a cup of bean-milk. Thanks.
Run Code Online (Sandbox Code Playgroud)
和text2:
please give mom a cup of bean milk! Thank you.
Run Code Online (Sandbox Code Playgroud)
(请注意,在“谢谢”之前有两个空格字符。)
google-diff-match-patch输出如下所示:
[please] give m(e)[om] a cup of bean(-)[ ]milk(.)[!] Thank(s)[ you].
Run Code Online (Sandbox Code Playgroud)
看来google-diff-match-patch仅忽略不同数量的空格。
我怎样才能告诉google-diff-match-patch也忽略像这样的字符[-.!]?
预期结果将是
[please] give m(e)[om] a cup of bean-milk. Thank(s)[ you].
Run Code Online (Sandbox Code Playgroud)
谢谢。
我有一个我想要存储的数据集,并且能够在Octave中加载
18.0 8 307.0 130.0 3504. 12.0 70 1 "chevrolet chevelle malibu"
15.0 8 350.0 165.0 3693. 11.5 70 1 "buick skylark 320"
18.0 8 318.0 150.0 3436. 11.0 70 1 "plymouth satellite"
16.0 8 304.0 150.0 3433. 12.0 70 1 "amc rebel sst"
17.0 8 302.0 140.0 3449. 10.5 70 1 "ford torino"
15.0 8 429.0 198.0 4341. 10.0 70 1 "ford galaxie 500"
14.0 8 454.0 220.0 4354. 9.0 70 1 "chevrolet impala"
14.0 8 440.0 215.0 4312. …Run Code Online (Sandbox Code Playgroud) 我已经预处理了文本数据到语料库中我现在想要建立一个基于前两个单词的预测模型(所以我认为3克模型?).基于我对我读过的文章的理解,以下是我在考虑如何做到这一点:
第1步:输入两个单词短语我们希望预测下一个单词
# phrase our word prediction will be based on
phrase <- "I love"
Run Code Online (Sandbox Code Playgroud)
第2步:计算3克频率
library(RWeka)
threegramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min=3, max=3))
dtm_threegram <- DocumentTermMatrix(corpus, control=list(tokenize=threegramTokenizer))
threegram_freq <- sort(colSums(as.matrix(dtm_threegram)), decreasing = TRUE)
Run Code Online (Sandbox Code Playgroud)
下一步是我遇到困难的地方.从概念上讲,我认为我应该将我的3-gram子集化为仅包括以"我喜欢"开头的三个单词组合.然后,我应该保持最高频率3克.例如,如果"我爱你"在我的语料库中出现12次并且"我爱啤酒"出现了15次,那么"啤酒"作为下一个单词的概率高于"爱",因此该模型应该返回前者.这是正确的方法,如果是这样,我如何以编程方式创建这样的东西?我的threegram_freq对象似乎是带有字符属性的数字类,我不完全理解它是什么.是否可以使用正则表达式仅包含以"我爱"开头的元素,然后以最高频率提取3-gram的第3个单词?
谢谢!
我从无法更改的外部系统执行的SQL查询中获得了一个(非常难看的)txt输出。这是输出示例:
FruitName Owner OwnerPhone
============= ================= ============
Red Apple Sr Lorem Ipsum 123123
Yellow Banana Ms Dolor sir Amet 456456
Run Code Online (Sandbox Code Playgroud)
如您所见,该FruitName列和该Owner列可能只包含很少的单词,并且这些列中可以包含多少个单词没有固定的模式。如果我line.split()在每行Python上使用make数组,它将删除所有空格,并使数组变成如下形式:
['Red', 'Apple', 'Sr', 'Lorem', 'Ipsum', '123123']
['Yellow', 'Banana', 'Ms', 'Dolor', 'sir', 'Amet', '456456']
Run Code Online (Sandbox Code Playgroud)
问题是,如何将其正确拆分成如下所示的输出:
['Red Apple', 'Sr Lorem Ipsum', '123123']
['Yellow Banana', 'Ms Dolor sir Amet', '456456']
Run Code Online (Sandbox Code Playgroud)
我是Python的新手,我不知道这种事情是否可行。任何帮助将不胜感激。谢谢!
text-processing ×10
python ×3
nlp ×2
unicode ×2
ascii ×1
awk ×1
batch-file ×1
diff ×1
io ×1
matlab ×1
n-gram ×1
octave ×1
parsing ×1
php ×1
prediction ×1
r ×1
regex ×1
ruby ×1
sed ×1
text-files ×1