我想看看,如果"001"还是"100"还是"000"在4个字符的字符串发生0和1.例如,4个字符的字符串可以是"1100"或"0010"或"1001"或"1111".如何使用单个命令匹配字符串中的许多字符串?
我知道grep可以用于模式匹配,但是使用grep,我一次只能检查一个字符串.我想知道多个字符串是否可以与其他命令一起使用或者与grep本身一起使用.
我找到了一种在术语 - 文档矩阵中使用bigrams而不是单个令牌的方法.解决方案已在stackoverflow上提出: findAssocs用于R中的多个术语
这个想法是这样的:
library(tm)
library(RWeka)
data(crude)
#Tokenizer for n-grams and passed on to the term-document matrix constructor
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
txtTdmBi <- TermDocumentMatrix(crude, control = list(tokenize = BigramTokenizer))
Run Code Online (Sandbox Code Playgroud)
但最后一行给出了错误:
Error in rep(seq_along(x), sapply(tflist, length)) :
invalid 'times' argument
In addition: Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
Run Code Online (Sandbox Code Playgroud)
如果我从最后一行删除了tokenizer它会创建一个常规的tdm,所以我猜问题是在BigramTokenizer函数中的某个地方,尽管这是Weka网站在这里给出的相同例子:http://tm.r-forge.r -project.org/faq.html#Bigrams.
什么算法用于查找ngrams?
假设我的输入数据是一个单词数组和我想要找到的ngram的大小,我应该使用什么算法?
我要求代码,优先选择R.数据存储在数据库中,因此也可以是plgpsql函数.Java是我更熟悉的语言,因此我可以将其"翻译"为另一种语言.
我不是懒惰,我只是要求代码,因为我不想重新发明轮子试图做一个已经完成的算法.
编辑:重要的是知道每个n-gram出现多少次.
编辑2:N-GRAMS有一个R包吗?
我正在开始使用R中的tm软件包,所以请耐心等待,并为大文本墙做道歉.我创造了一个相当大的社会主义/共产主义宣传语料库,并希望提取新创造的政治术语(多个词,例如"斗争 - 批评 - 转型运动").
这是一个两步的问题,一个关于我的代码到目前为止,一个关于我应该如何继续.
第1步:为此,我想首先确定一些常见的ngram.但是我很早就陷入了困境.这是我一直在做的事情:
library(tm)
library(RWeka)
a <-Corpus(DirSource("/mycorpora/1965"), readerControl = list(language="lat")) # that dir is full of txt files
summary(a)
a <- tm_map(a, removeNumbers)
a <- tm_map(a, removePunctuation)
a <- tm_map(a , stripWhitespace)
a <- tm_map(a, tolower)
a <- tm_map(a, removeWords, stopwords("english"))
a <- tm_map(a, stemDocument, language = "english")
# everything works fine so far, so I start playing around with what I have
adtm <-DocumentTermMatrix(a)
adtm <- removeSparseTerms(adtm, 0.75)
inspect(adtm)
findFreqTerms(adtm, lowfreq=10) # find terms …Run Code Online (Sandbox Code Playgroud) 我正在为学校开展研究项目.我写了一些文本挖掘软件,分析集合中的法律文本,并吐出一个分数,表明它们有多相似.我运行程序来比较每个文本和其他所有文本,我有这样的数据(虽然有更多的点):
codeofhammurabi.txt crete.txt 0.570737
codeofhammurabi.txt iraqi.txt 1.13475
codeofhammurabi.txt magnacarta.txt 0.945746
codeofhammurabi.txt us.txt 1.25546
crete.txt iraqi.txt 0.329545
crete.txt magnacarta.txt 0.589786
crete.txt us.txt 0.491903
iraqi.txt magnacarta.txt 0.834488
iraqi.txt us.txt 1.37718
magnacarta.txt us.txt 1.09582
Run Code Online (Sandbox Code Playgroud)
现在我需要在图表上绘制它们.我可以轻松地反转分数,以便现在小值表示相似的文本,大值表示不相似的文本:值可以是表示文本的图形上的点之间的距离.
codeofhammurabi.txt crete.txt 1.75212
codeofhammurabi.txt iraqi.txt 0.8812
codeofhammurabi.txt magnacarta.txt 1.0573
codeofhammurabi.txt us.txt 0.7965
crete.txt iraqi.txt 3.0344
crete.txt magnacarta.txt 1.6955
crete.txt us.txt 2.0329
iraqi.txt magnacarta.txt 1.1983
iraqi.txt us.txt 0.7261
magnacarta.txt us.txt 0.9125
Run Code Online (Sandbox Code Playgroud)
简短版本:上面的值是散点图上点之间的距离(1.75212是codeofhammurabi点和克里特点之间的距离).我可以想象一个大的方程组,圆圈表示点之间的距离.制作此图表的最佳方法是什么?我有MATLAB,R,Excel,并且可以访问我可能需要的任何软件.
如果你甚至可以指出我的方向,我将无限感激.
例如,我有数十亿个短语,我想要它们的类似群集.
> strings.to.cluster <- c("Best Toyota dealer in bay area. Drive out with a new car today",
"Largest Selection of Furniture. Stock updated everyday" ,
" Unique selection of Handcrafted Jewelry",
"Free Shipping for orders above $60. Offer Expires soon",
"XXXX is where smart men buy anniversary gifts",
"2012 Camrys on Sale. 0% APR for select customers",
"Closing Sale on office desks. All Items must go"
)
Run Code Online (Sandbox Code Playgroud)
假设这个向量是数十万行.R中是否有一个包来按意义聚类这些短语?或者是否有人建议通过对给定短语的含义对"相似"短语进行排名的方法.