在我的项目中,我一般都使用文本.我发现预处理可能非常慢.所以我想问你是否知道如何优化我的代码.流程是这样的:
获取HTML页面 - >(以纯文本 - >词干 - >删除停用词) - >进一步文本处理
括号中有预处理步骤.该应用程序运行在大约10.265秒,但预处理需要9.18秒!这是预处理50个HTML页面的时间(不包括下载).
我使用HtmlAgilityPack库将HTML转换为纯文本.这很快.转换1个文档需要2.5ms,所以它相对比较好.
问题出现了.阻止一个文档需要120毫秒.不幸的是,那些HTML页面是波兰语.用C#编写的波兰语不存在词干.我知道只有2个免费使用Java编写:stempel和morfologic.我借助IKVM软件将stempel.jar预编译为stempel.dll.所以没有更多的事要做.
消除停用词也需要很多时间(1个文档约70毫秒).它是这样完成的:
result = Regex.Replace(text.ToLower(), @"(([-]|[.]|[-.]|[0-9])?[0-9]*([.]|[,])*[0-9]+)|(\b\w{1,2}\b)|([^\w])", " ");
while (stopwords.MoveNext())
{
string stopword = stopwords.Current.ToString();
result = Regex.Replace(result, "(\\b"+stopword+"\\b)", " ");
}
return result;
Run Code Online (Sandbox Code Playgroud)
首先,我删除所有数字,特殊字符,单词和双字母单词.然后在循环中删除停用词.大概有270个停用词.
有可能让它更快吗?
编辑:
我想要做的是删除所有不超过2个字母的单词.所以我想把所有特殊的字符(包括'.',',','?','!'等)数字,停止字样.我只需要用于数据挖掘的纯语言.
我需要计算BLEU分数,以确定两个句子是否相似.我读过一些文章,主要是关于测量机器翻译准确度的BLEU分数.但是我需要一个BLEU分数来找出句子之间的相似性.同一种语言[英语].(即)(两个句子都是英文).感谢期待.
可能重复:
如何在Perl中将字符串分成两个字符组成的块?
我想将一个字符串拆分成一个数组,并按2个字符组成部分:
$input = "DEADBEEF";
@output = split(/(..)/,$input);
Run Code Online (Sandbox Code Playgroud)
这种方法使其他所有元素都为空。
$VAR1 = '';
$VAR2 = 'DE';
$VAR3 = '';
$VAR4 = 'AD';
$VAR5 = '';
$VAR6 = 'BE';
$VAR7 = '';
$VAR8 = 'EF';
Run Code Online (Sandbox Code Playgroud)
如何获得一个连续的数组?
$VAR1 = 'DE';
$VAR2 = 'AD';
$VAR3 = 'BE';
$VAR4 = 'EF';
Run Code Online (Sandbox Code Playgroud)
(...除了获得第一个结果并删除其他所有行之外...)
我需要编写一个从左到右翻转字符串的所有字符的函数.
例如:
译文:你好.
应该成为
.goȡyzⱥlëhtrểvoᶁềṕmujxofnworḇkçiuqėhT
我可以将问题限制在UTF-16(与UTF-8有相同的问题,只是不那么频繁).
一个天真的解决方案可能会尝试翻转所有的东西(例如,逐字逐句,其中一个字是16位 - 如果我们假设一个字节是16 位,我会说字节为字节.我也可以说字符-for-character其中character是Char表示单个代码点的数据类型):
String original = "??f???r??n?t";
String flipped = "";
foreach (Char c in s)
{
flipped = c+fipped;
}
Run Code Online (Sandbox Code Playgroud)
导致错误翻转文本的结果:
??f???r??n?t?t?n??r???f??这是因为一个"字符"需要多个"代码点".
??f???r??n?t? ? f ˜ ? ? r ? ? n i t ?并翻转每个"代码点"给出:
? t i n ? ? r ? ? ˜ f ? ?这不仅不是有效的UTF-16编码,它的字符也不一样.
当存在以下情况时,问题发生在UTF-16编码中:
这些相同的问题在UTF-8编码中发生,附加情况
我开始使用scikit-learn做一些NLP.我已经使用了NLTK的一些分类器,现在我想尝试在scikit-learn中实现的分类器.
我的数据基本上是句子,我从这些句子的某些单词中提取特征来做一些分类任务.我的大多数功能都是名义上的:单词的词性(POS),左到右的单词,左到右的单词,右到右的单词,POS单词到单词. - 正确的,句法关系从一个词到另一个词的路径等.
当我使用NLTK分类器(决策树,朴素贝叶斯)进行一些实验时,特征集只是一个字典,其中包含特征的相应值:标称值.例如:[{"postag":"noun","wleft":"house","path":"VPNPNP",...},....].我只需将其传递给分类器,他们就完成了自己的工作.
这是使用的代码的一部分:
def train_classifier(self):
if self.reader == None:
raise ValueError("No reader was provided for accessing training instances.")
# Get the argument candidates
argcands = self.get_argcands(self.reader)
# Extract the necessary features from the argument candidates
training_argcands = []
for argcand in argcands:
if argcand["info"]["label"] == "NULL":
training_argcands.append( (self.extract_features(argcand), "NULL") )
else:
training_argcands.append( (self.extract_features(argcand), "ARG") )
# Train the appropriate supervised model
self.classifier = DecisionTreeClassifier.train(training_argcands)
return
Run Code Online (Sandbox Code Playgroud)
以下是提取的一个功能集的示例:
[({'phrase': u'np', 'punct_right': 'NULL', 'phrase_left-sibling': 'NULL', 'subcat': 'fcl=np np vp np …Run Code Online (Sandbox Code Playgroud) python text-processing classification scikit-learn feature-engineering
我正在努力从出现在英文报纸上的各种广告中提取人名。
但是,我注意到在提取其中存在的名称之前,我需要确定广告的边界,因为我只需要提取第一个出现的名称。我从斯坦福 NLP 开始。我成功提取了名称。但我陷入了识别段落边界的困境。
有没有办法识别段落边界。?
我有来自twitter的推文语料库.我清理这个语料库(removeWords,tolower,删除URls),最后还想删除标点符号.
这是我的代码:
tweetCorpus <- tm_map(tweetCorpus, removePunctuation, preserve_intra_word_dashes = TRUE)
Run Code Online (Sandbox Code Playgroud)
现在的问题是,通过这样做,我也松开了#标签.有没有办法用tm_map删除标点符号但保留标签?
我有包含YAML frontmatter元数据的markdown文件,如下所示:
---
title: Something Somethingelse
author: Somebody Sometheson
---
Run Code Online (Sandbox Code Playgroud)
但是YAML的宽度各不相同.我可以使用Posix命令sed来删除文件开头处的那个前端吗?东西只是删除一切之间---和---,包容性,也忽略了文件的其余部分,如果有---小号在其他地方.
我已阅读从text1.similar("怪物")和text1.concordance("怪物")此.
当我不能得到之间的差额满意的答复text1.concordance('monstrous'),并text1.similar('monstrous')在Python自然语言处理工具包.
那么请你详细解释一下这个例子吗?
我每天都会收到一个文件,其中有 10,000 条记录,其中 99% 都在最后一天的文件中。如何使用 macOS 命令行删除新文件中前一天文件中存在的行?
remove_duplicates newfile oldfile
Run Code Online (Sandbox Code Playgroud)
这些文件看起来像这样:
"First Last"\t"email"\t"phone"\t"9 more columns..."
Run Code Online (Sandbox Code Playgroud)
注意,我尝试了这个awk解决方案,但它没有输出任何内容,即使我确认了重复的行。
text-processing ×10
nlp ×2
python ×2
regex ×2
algorithm ×1
bash ×1
c# ×1
java ×1
localization ×1
macos ×1
nltk ×1
opennlp ×1
perl ×1
punctuation ×1
r ×1
scikit-learn ×1
split ×1
stanford-nlp ×1
text ×1
tm ×1
unicode ×1