我对进行一些文档聚类感兴趣,现在我正在考虑使用 TF-IDF 来实现此目的。
如果我没记错的话,TF-IDF 特别用于评估给定查询的文档的相关性。如果我没有特定的查询,如何将 tf-idf 应用于聚类?
language-agnostic algorithm text-processing information-retrieval tf-idf
我正在尝试在大约 5000 条记录的列表中查找重复项。每条记录都是一个人的姓名和地址,但在一个字段中输入的内容不一致,因此我正在尝试一种模糊匹配方法。我的方法(使用rapidminer)是对文本进行一些预处理(即标记化,删除常见和不相关的单词,例如“先生”等),生成TF-IDF并使用DBSCAN对匹配记录进行聚类。这是有效的,并且给出了相当好的结果,但是当我尝试运行完整的数据集时需要很长时间。它还会导致很多簇只有一个元素,我不知道这如何影响 DBSCAN 的计算时间。
是否有一种聚类算法可以更快地处理此类数据,或者是否有更好的方法来解决这个问题?
text-processing cluster-analysis data-mining rapidminer dbscan
这是一个电子邮件标题示例,
header = """
From: Media Temple user (mt.kb.user@gmail.com)
Subject: article: A sample header
Date: January 25, 2011 3:30:58 PM PDT
To: user@example.com
Return-Path: <mt.kb.user@gmail.com>
Envelope-To: user@example.com
Delivery-Date: Tue, 25 Jan 2011 15:31:01 -0700
Received: from :po-out-1718.google.com ([72.14.252.155]:54907) by cl35.gs01.gridserver.com with esmtp (Exim 4.63) (envelope-from <mt.kb.user@gmail.com>) id 1KDoNH-0000f0-RL for user@example.com; Tue, 25 Jan 2011 15:31:01 -0700
Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:mime-version:content-type; bh=+JqkmVt+sHDFIGX5jKp3oP18LQf10VQjAmZAKl1lspY=; b=F87jySDZnMayyitVxLdHcQNL073DytKRyrRh84GNsI24IRNakn0oOfrC2luliNvdea LGTk3adIrzt+N96GyMseWz8T9xE6O/sAI16db48q4Iqkd7uOiDvFsvS3CUQlNhybNw8m CH/o8eELTN0zbSbn5Trp0dkRYXhMX8FTAwrH0=
Domainkey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=wkbBj0M8NCUlboI6idKooejg0sL2ms7fDPe1tHUkR9Ht0qr5lAJX4q9PMVJeyjWalH 36n4qGLtC2euBJY070bVra8IBB9FeDEW9C35BC1vuPT5XyucCm0hulbE86+uiUTXCkaB 6ykquzQGCer7xPAcMJqVfXDkHo3H61HM9oCQM=
Message-Id: <c8f49cec0807011530k11196ad4p7cb4b9420f2ae752@mail.gmail.com>
Mime-Version: …Run Code Online (Sandbox Code Playgroud) 我很难区分指示性摘要和信息性摘要。你能给我一个清楚的例子来说明它们之间的区别吗?
提前致谢!
我每天都会收到一个文件,其中有 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解决方案,但它没有输出任何内容,即使我确认了重复的行。
我在这个表格上有一个文件:
X/this is the first match/blabla
X-this is
the second match-
and here we have some fluff.
Run Code Online (Sandbox Code Playgroud)
我想提取出现在“X”之后和相同标记之间的所有内容。所以如果我有“X+match+”,我想得到“match”,因为它出现在“X”之后和标记“+”之间。
因此,对于给定的示例文件,我希望得到以下输出:
this is the first match
Run Code Online (Sandbox Code Playgroud)
进而
this is
the second match
Run Code Online (Sandbox Code Playgroud)
我设法使用以下方法获取 X 和标记之间的所有内容:
grep -zPo '(?<=X(.))(.|\n)+(?=\1)' file
Run Code Online (Sandbox Code Playgroud)
那是:
grep -Po '(?<=X(.))(.|\n)+(?=\1)'匹配 X 后跟(something)被捕获并在最后匹配(?=\1)(我基于我的答案在这里的代码)。(.|\n)用来匹配任何东西,包括一个新行,我也在-zgrep 中使用它来匹配新行。所以这很有效,唯一的问题来自输出的显示:
$ grep -zPo '(?<=X(.))(.|\n)+(?=\1)' file
this is the first matchthis is
the second match
Run Code Online (Sandbox Code Playgroud)
如您所见,所有匹配项一起出现,“这是第一个匹配项”后跟“这是第二个匹配项”,完全没有分隔符。我知道这来自“-z”的使用,它将所有文件视为一组行,每行都以零字节(ASCII NUL 字符)而不是换行符(引用“man grep”)结尾。
那么:有没有办法分别获得所有这些结果? …
我有数百万个短(最多30个字)的文件,我需要将它们分成几个已知的类别.文档可以匹配几个类别(很少,但可能).文档也可能与任何类别(也很少)不匹配.我还有数百万份已经分类过的文件.我应该使用什么算法来完成这项工作.我不需要快速完成.我需要确保算法正确分类(尽可能).
我应该使用什么算法?C#中是否有in实现?
谢谢您的帮助!
我有原始的html,里面有一些css类用于各种标签.
例:
输入:
<p class="opener" itemprop="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p>
Run Code Online (Sandbox Code Playgroud)
我想得到简单的HTML:
输出:
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p>
Run Code Online (Sandbox Code Playgroud)
我不知道这些类的名字.我需要在JavaScript(node.js)中执行此操作.
任何的想法?
我有一个正则表达式"[\ r \n\f] +"来查找字符串中包含的行数.我的代码是这样的:
pattern = Pattern.compile("[\\r\\n\\f]+")
String[] lines = pattern.split(texts);
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我有这样的示例字符串:
"\t\t\t \r\n \n"
"\r\n"
Run Code Online (Sandbox Code Playgroud)
解析第一个字符串的结果是2,但是当它解析第二个字符串时它变为0.
我认为第二个字符串包含1行,尽管该行是"空白"(假设我正在编辑一个以文本编辑器中的"\ r \n"开头的文件,插入符号是否应放在第二行?).我的正则表达式是不正确的解析行?或者我在这里遗失了什么?
编辑:
我想我会让问题更加明显:
为什么
// notice the trailing space in the string
"\r\n ".split("\r\n").length == 2 // results in 2 strings {"", " "}. So this block of text has two lines.
Run Code Online (Sandbox Code Playgroud)
但
// notice there's no trailing space in the string
"\r\n".split("\r\n").length == 0 // results in an empty array. Why "" (empty string) is not in the result and …Run Code Online (Sandbox Code Playgroud) 我试图通过R中的三元组生成所有unigrams的列表,最终制作一个包含所有单个单词,bigrams和trigrams的列的文档短语矩阵.
我希望找到一个简单的包装,但没有成功.我最终得到了RWeka,下面的代码和输出,但不幸的是,这种方法会丢弃所有2或1个字符的unigrams.
这可以修复,还是人们知道另一条路?谢谢!
TrigramTokenizer <- function(x) NGramTokenizer(x,
Weka_control(min = 1, max = 3))
Text = c( "Ab Hello world","Hello ab", "ab" )
tt = Corpus(VectorSource(Text))
tdm <- TermDocumentMatrix( tt,
control = list(tokenize = TrigramTokenizer))
inspect(tdm)
# <<TermDocumentMatrix (terms: 6, documents: 3)>>
# Non-/sparse entries: 7/11
# Sparsity : 61%
# Maximal term length: 14
# Weighting : term frequency (tf)
# Docs
# Terms 1 2 3
# ab hello 1 0 0
# ab hello world 1 0 0 …Run Code Online (Sandbox Code Playgroud) text-processing ×10
regex ×2
algorithm ×1
awk ×1
bash ×1
c# ×1
data-mining ×1
dbscan ×1
dictionary ×1
grep ×1
html ×1
java ×1
javascript ×1
macos ×1
newline ×1
nlp ×1
node.js ×1
python ×1
quanteda ×1
r ×1
rapidminer ×1
rweka ×1
string ×1
text-mining ×1
text-parsing ×1
tf-idf ×1
tm ×1