标签: text-processing

快速文本预处理

在我的项目中,我一般都使用文本.我发现预处理可能非常慢.所以我想问你是否知道如何优化我的代码.流程是这样的:

获取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个字母的单词.所以我想把所有特殊的字符(包括'.',',','?','!'等)数字,停止字样.我只需要用于数据挖掘的纯语言.

c# regex text-processing

6
推荐指数
2
解决办法
3560
查看次数

用于句子相似性检测的BLEU分数实现

我需要计算BLEU分数,以确定两个句子是否相似.我读过一些文章,主要是关于测量机器翻译准确度的BLEU分数.但是我需要一个BLEU分数来找出句子之间的相似性.同一种语言[英语].(即)(两个句子都是英文).感谢期待.

java algorithm text-processing nlp machine-translation

5
推荐指数
2
解决办法
1万
查看次数

perl-将字符串分成2个字符的组

可能重复:
如何在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)

(...除了获得第一个结果并删除其他所有行之外...)

regex perl text-processing split

5
推荐指数
1
解决办法
6061
查看次数

如何水平翻转文字?

我需要编写一个从左到右翻转字符串的所有字符的函数.

例如:

译文:你好.

应该成为

.goȡyzⱥlëhtrểvoᶁềṕmujxofnworḇkçiuqėhT

我可以将问题限制在UTF-16(与UTF-8有相同的问题,只是不那么频繁).

天真的解决方案

一个天真的解决方案可能会尝试翻转所有的东西(例如,逐字逐句,其中一个字是16位 - 如果我们假设一个字节是16 位,我会说字节为字节.我也可以说字符-for-character其中characterChar表示单个代码点的数据类型):

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编码中发生,附加情况

  • 0..127 …

unicode text text-processing localization right-to-left

5
推荐指数
1
解决办法
2541
查看次数

文本为scikit-learn中的分类算法提供输入格式

我开始使用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

5
推荐指数
1
解决办法
7312
查看次数

如何在 NLP 框架中执行段落边界检测?

我正在努力从出现在英文报纸上的各种广告中提取人名。

但是,我注意到在提取其中存在的名称之前,我需要确定广告的边界,因为我只需要提取第一个出现的名称。我从斯坦福 NLP 开始。我成功提取了名称。但我陷入了识别段落边界的困境。

有没有办法识别段落边界。?

text-processing nlp stanford-nlp opennlp apache-stanbol

5
推荐指数
1
解决办法
2706
查看次数

tm自定义removePunctuation除了标签

我有来自twitter的推文语料库.我清理这个语料库(removeWords,tolower,删除URls),最后还想删除标点符号.

这是我的代码:

tweetCorpus <- tm_map(tweetCorpus, removePunctuation, preserve_intra_word_dashes = TRUE)
Run Code Online (Sandbox Code Playgroud)

现在的问题是,通过这样做,我也松开了#标签.有没有办法用tm_map删除标点符号但保留标签?

customization text-processing r punctuation tm

5
推荐指数
2
解决办法
4127
查看次数

如何从markdown文件中删除YAML frontmatter?

我有包含YAML frontmatter元数据的markdown文件,如下所示:

---
title: Something Somethingelse
author: Somebody Sometheson 
---
Run Code Online (Sandbox Code Playgroud)

但是YAML的宽度各不相同.我可以使用Posix命令sed来删除文件开头处的那个前端吗?东西只是删除一切之间------,包容性,也忽略了文件的其余部分,如果有---小号在其他地方.

text-processing

5
推荐指数
1
解决办法
863
查看次数

nltk中similar()和一致性之间的差异

我已阅读从text1.similar("怪物")和text1.concordance("怪物").

当我不能得到之间的差额满意的答复text1.concordance('monstrous'),并text1.similar('monstrous')在Python自然语言处理工具包.

那么请你详细解释一下这个例子吗?

python text-processing nltk

5
推荐指数
1
解决办法
3781
查看次数

如何删除一个文件中存在于另一个文件中的行?

我每天都会收到一个文件,其中有 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解决方案,但它没有输出任何内容,即使我确认了重复的行。

macos bash text-processing

5
推荐指数
1
解决办法
2802
查看次数