有没有人知道一个开源\免费库,它可以进行术语聚类?
谢谢,yaniv
text-processing information-retrieval text-analysis text-mining
我想在MATLAB中对文本进行分层凝聚聚类.说,我有四句话,
I have a pen.
I have a paper.
I have a pencil.
I have a cat.
Run Code Online (Sandbox Code Playgroud)
我想对上面四个句子进行聚类,看看哪个更相似.我知道统计工具箱有像pdist测量成对距离,linkage计算聚类相似性等命令.一个简单的代码如:
X=[1 2; 2 3; 1 4];
Y=pdist(X, 'euclidean');
Z=linkage(Y, 'single');
H=dendrogram(Z)
Run Code Online (Sandbox Code Playgroud)
工作正常并返回树形图.
我想知道如上所述我可以在文本上使用这些命令.有什么想法吗 ?
更新:
感谢Amro.读取理解并计算字符串之间的距离.代码如下:
clc
S1='I have a pen'; % first String
f_id=fopen('events.txt','r'); %saved strings to compare with
events=textscan(f_id, '%s', 'Delimiter', '\n');
fclose(f_id); %close file.
events=events{1}; % saving the text read.
ii=numel(events); % selects one text randomly.
% store the texts in a cell array
for …Run Code Online (Sandbox Code Playgroud) 我想从文本中获取最相关的单词以准备标签云.
我使用scikit-learn包中的CountVectoriser:
cv = CountVectorizer(min_df=1, charset_error="ignore",
stop_words="english", max_features=200)
Run Code Online (Sandbox Code Playgroud)
这很好,因为它给了我的话和频率:
counts = cv.fit_transform([text]).toarray().ravel()
words = np.array(cv.get_feature_names())
Run Code Online (Sandbox Code Playgroud)
我可以过滤非频繁的单词:
words = words[counts > 1]
counts = counts[counts > 1]
Run Code Online (Sandbox Code Playgroud)
以及单词,即数字:
words = words[np.array(map(lambda x: x.isalpha(), words))]
counts = counts[np.array(map(lambda x: x.isalpha(), words))]
Run Code Online (Sandbox Code Playgroud)
但它仍然不完美......
我的问题是:
还请注意:
使用R tm,我有一个术语doc矩阵:
文档术语矩阵(16977术语,29414文档)
非稀疏条目:355000/499006478稀疏度:100%最大术语长度:7加权:术语频率(tf)
为了进一步分析,我必须将术语数限制为2425.
如何通过在例如20以上的频率中包含freq来生成新的dtm?
由于矩阵很大,传统的方法as.matrix不能应用.
谢谢!
我想使用python nltk将SVM分类应用于文本挖掘目的,并获得精度,回忆准确度不同的测量信息.为此,我预处理数据集并将我的数据集拆分为两个文本文件,即-pos_file.txt(正标签)和neg_file .txt(否定标签).现在我想应用SVM分类器和随机抽样70%用于训练数据,30%用于测试.我看到了scikit-learn的一些文档,但不完全确定我将如何应用它?
pos_file.txt和neg_file.txt都可以被视为单词包.有用的链接 -
示例文件:pos_file.txt
stackoverflowerror restor default properti page string present
multiprocess invalid assert fetch process inform
folderlevel discoveri option page seen configur scope select project level
Run Code Online (Sandbox Code Playgroud)
示例文件:neg_file.txt
class wizard give error enter class name alreadi exist
unabl make work linux
eclips crash
semant error highlight undeclar variabl doesnt work
Run Code Online (Sandbox Code Playgroud)
此外,对unigram,bigram和trigram应用相同的方法会很有趣.期待您的建议或示例代码.
有一个字符串向量列表:
xx <- c("concord wanderer basic set air snug beige",
"concord wanderer basic set air snug black noir",
"concord wanderer basic set air snug blue bleu",
"concord wanderer basic set air snug brown marron",
"concord wanderer basic set air snug green vert",
"concord wanderer basic set air snug grey gris",
"concord wanderer basic set air snug red rouge",
"concord wanderer basic set air snug rose" )
Run Code Online (Sandbox Code Playgroud)
我试图在向量的元素之间获得最小的共享部分,例如,在这里我应该得到:
"concord wanderer basic set air snug"
Run Code Online (Sandbox Code Playgroud)
xx是前一个过程的结果,所以我确信元素之间存在共享部分.但被删除的部分并不总是在他的结尾.
使用strsplit和`table我得到这个部分解决方案,但它有点棘手,我放松了原始的单词顺序:
table_x …Run Code Online (Sandbox Code Playgroud) 我正在跟踪Nathan Dannerman和Richard Heimann撰写的来自R的Social Media Mining中的文本挖掘示例:The Book。使用拉鸣叫后searchTwitter的功能,笔者采用sapply的list提取这样的文字部分:
rstats <- searchTwitter("#rstats", n = 1000)
rstats_list <- sapply(rstats, function (x) x$getText())
整齐地制作一个字符矢量,其中仅包含来自推文的文本部分。什么是getText()?我在任何地方都找不到任何东西-作者没有充分解释。我看了看tm包装文件-什么都没有!我在SO上寻找与此相关的问题- 从推文中获取文本回答者在问与我相同的问题。在Inside-R中,我发现了这一点:http : //www.inside-r.org/r-doc/base / gettext,但与getText。有人可以解释我所缺少的吗?
我在Python中构建了一个"货币标记器",它标识所有货币表达式并用标记的字符串替换它们.
例如,
替换"I have $20 in my pocket"
为"I have <Currency>$20</Currency> in my pocket"
其中一项任务要求我用标记字符串替换标识为Currency的字符串.我正在使用re.sub()这个.
除了"$ 4.4B"或"$ 4.4M"形式外,它适用于各种形式的字符串.
我尝试在我的python控制台中运行简单的示例,发现它re.sub()与具有混合美元模式的模式不一致.
例如,
>>> text = "I have #20 in my pocket"
>>> re.sub("#20", "$20", text)
'I have $20 in my pocket'
>>> text = "I have $20 in my pocket"
>>> re.sub("$20", "#20", text)
'I have $20 in my pocket'
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,您会看到当我尝试将"$ 20"替换为"#20"时,它不起作用(在第二种情况下).
当然,任何帮助都将非常感激.由于这个原因,一个非常愚蠢的虫子出现了并且正在拖延主要工作.
我收集了一些推特数据:
#connect to twitter API
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
#set radius and amount of requests
N=200 # tweets to request from each query
S=200 # radius in miles
lats=c(38.9,40.7)
lons=c(-77,-74)
roger=do.call(rbind,lapply(1:length(lats), function(i) searchTwitter('Roger+Federer',
lang="en",n=N,resultType="recent",
geocode=paste (lats[i],lons[i],paste0(S,"mi"),sep=","))))
Run Code Online (Sandbox Code Playgroud)
在此之后我完成了:
rogerlat=sapply(roger, function(x) as.numeric(x$getLatitude()))
rogerlat=sapply(rogerlat, function(z) ifelse(length(z)==0,NA,z))
rogerlon=sapply(roger, function(x) as.numeric(x$getLongitude()))
rogerlon=sapply(rogerlon, function(z) ifelse(length(z)==0,NA,z))
data=as.data.frame(cbind(lat=rogerlat,lon=rogerlon))
Run Code Online (Sandbox Code Playgroud)
现在我想获得所有具有long和lat值的推文:
data=filter(data, !is.na(lat),!is.na(lon))
lonlat=select(data,lon,lat)
Run Code Online (Sandbox Code Playgroud)
但是现在我只获得了NA值....对这里出了什么问题的任何想法?
对R来说很新,并且已经开始使用tidytext包.
我正在尝试使用参数来输入unnest_tokens函数,这样我就可以进行多列分析.所以不要这样
library(janeaustenr)
library(tidytext)
library(dplyr)
library(stringr)
original_books <- austen_books() %>%
group_by(book) %>%
mutate(linenumber = row_number(),
chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]",
ignore_case = TRUE)))) %>%
ungroup()
original_books
tidy_books <- original_books %>%
unnest_tokens(word, text)
Run Code Online (Sandbox Code Playgroud)
最后一行代码是:
output<- 'word'
input<- 'text'
tidy_books <- original_books %>%
unnest_tokens(output, input)
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个:
check_input(x)出错:输入必须是任意长度的字符向量或字符向量列表,每个字符向量的长度为1.
我试过as.character()没有太多运气.
关于这将如何工作的任何想法?
text-mining ×10
r ×5
python ×3
tm ×3
bigdata ×1
data-mining ×1
fuzzy-search ×1
intersection ×1
matlab ×1
nltk ×1
python-2.7 ×1
regex ×1
scikit-learn ×1
string ×1
svm ×1
twitter ×1