C^5,克利夫角收集卡目录

自1990年以来,我一直在写书、节目、时事通讯专栏和博客。我现在已经将所有这些材料收集到一个存储库中。克利夫角收藏由458份“文件”组成,全部在互联网上提供。有

  • 来自克利夫角博客的150篇文章。
  • 克利夫角新闻和笔记版的43个专栏。
  • 33章来自两本书,MATLAB实验和MATLAB数值计算。
  • 来自克利夫实验室,EXM和NCM的218个项目。
  • 14个来自麻省理工学院公开课程和其他地方的视频成绩单。

C^5是一个应用程序,一个搜索工具,就像一个传统的图书馆卡片目录。它允许你在集合中进行基于关键字的搜索,并通过网络链接到材料。对查询的响应是根据潜在语义索引(Latent Semantic Indexing, LSI)生成的分数排序的,该索引采用关键字计数的术语文档矩阵的奇异值分解。

内容

打开图

这是C^5的打开窗口。

c5

在顶部的编辑框中输入一个查询,通常只有一个关键字。这是一个术语.各种各样的名字文档然后在文档框中逐个显示与术语相关的信息。

箭头键允许扫描和更改文档列表。LSI评分决定列表的顺序。术语计数是查询术语在文档中出现的次数(如果有的话)。web按钮可以访问互联网上的文档副本。

Knuth不

对于我的第一个例子,让我们搜索我写过的关于斯坦福大学计算机科学名誉教授Donald Knuth的材料。在查询框或命令行中输入“knuth”。

c5knuth

第一个文档名为“blog/c5_blog”。M”指的是这篇博客文章,所以这里有一点自我参照。文档后缀为.m因为我博客的原始文本是由MATLAB程序处理的发布命令。

术语计数“10,10 /29”表明“knuth”在本文档中出现了10次,到目前为止,我们已经看到了“knuth”在整个集合中出现的29次中的10次。

点击日志按钮,然后在右边箭头上点击十几次。连续显示的日志被打印在命令窗口中。文档名称、日期和术语计数将按照LSI评分的递减顺序显示。

% knuth%箭头文档术语计数lsi日期%的博客/ c5_blog。m 10 10/29 0.594 2017年8月28日% > blog/easter_blog。m 5 15/29 0.553 2013年3月18日% > blog/lambertw_blog。m 3 18/29 0.183 02- 9月2013% > news/stiff_equations.txt 2 20/29 0.182 01- 5 -2003% > blog/hilbert_blog。m 2 22/29 0.139 02-Feb-2013% > blog/random_blog。m 2 24/29 0.139 17- april 2015% > exmm/复活节。M 1 25/29 0.112 2016% >博客/gef。m 3 28/29 0.100 2013年1月07日% > ncmm/ode23tx。M 0 28/29 0.086 2016% > news/normal_behavior.txt 0 28/29 0.070 01- 05.2001% > blog/magic_2。m 0 28/29 0.059 05- 11月2012% ..........% >>博客/denorms。m 1 29/29 0.010 2014年7月21日.........

第二个最相关的文档是“easter_blog”。m”是2013年的一篇文章,描述了Knuth推广的一种算法,用于计算西历或公历中每年庆祝复活节星期日的日期。词条计数为“5,15 /29”,因此前两个文档占搜索词条总出现次数的一半多一点。

接下来的六行告诉我们,“knuth”出现在关于Lambert W函数、Hilbert矩阵、随机数和George Forsythe (gef)的博客文章中,以及2003年关于刚性微分方程的MATLAB新闻和注释专栏中,以及EXM用于计算复活节日期的实际MATLAB程序中。

以下术语计数为零的结果是不包含“knuth”的博客文章,但LSI分数表明它们可能是相关的。最后,名为“denorms”的博客文章是关于非正规浮点数的。右击右箭头可以跳过术语计数为零的文档。

c5setup

我不知道怎么分析. html. pdf文件,所以我收集了所有我写的东西的原始资料,现在可以在网上找到。有.m博客文件和MATLAB程序,.tex书中章节的LaTeX文件,以及. txt时事通讯专栏和视频文本的文件。有458个文件,总计约3.24兆字节的文本。

我有一个程序,c5setup,我在自己的笔记本电脑上运行,以提取所有单独的单词并生成术语文档矩阵。这是一个稀疏矩阵(j, k)第-th项是k第-项出现在jth文档。保存在c5database.matc ^ 5应用程序。

的列表中消除了经常出现的英语单词,如“the”stopwords

长度(stopwords)
Ans = 177

c5database

清晰的负载c5database
名称大小字节类属性A 16315x458 1552776双稀疏D 458x1 40628 string L 1x1 120156 struct 16315x1 1132930 string
  • 一个是术语文档矩阵。
  • D是我的源文档的个人存储库中文件名的字符串数组。
  • l是一个包含字符串数组的结构体,用于在web上生成文档的url。
  • T是关键字或术语的字符串数组。

稀疏

术语文档矩阵的稀疏性略高于1%。

稀疏度= nnz(A)/numel(A)
稀疏度= 0.0130

间谍

术语文档矩阵的前1000行间谍图。

clf间谍((1:1000:))

最常用的术语

行和是总项数。

ttc = sum(A,2);

找出至少出现1000次的项。

K = find(ttc >= 1000);流(“-10年代% % 6 s \ n”, (T (k) num2str (ttc (k))))
函数1806 matlab 1407矩阵1499 1 1262 2 1090

惊喜。我写了很多关于MATLAB和矩阵的东西。

奇异值

我们也可以计算整个矩阵的所有奇异值。这只需要不到一秒钟。使用SVD的经济版本是很重要的,它可以产生U尺寸与一个.否则就是16,315 × 16,315U

tic [U,S,V] = svd(满(A),“经济学”);toc
运行时间为0.882556秒。

奇异值的对数图表明,奇异值下降得不是很快。

clf semilogy(诊断接头(S),“。”“markersize”,10)轴([-10 450 1 1000])的奇异值

约秩逼近

我写了一篇关于潜在语义索引一个月前。LSI采用了术语文档矩阵的降秩近似。c ^ 5有一个选择等级的滑块。奇异值的图表明,近似的准确性几乎与所选值无关。除了非常小的值或接近满秩的大值之外,任何值都会给出一个在1%到10%之间的近似值。LSI的强大并不是来源于近似精度。我通常将秩取为列数的一半左右。

n = size(A,2);K = n/2;Uk = U(:,1:k);Sk = S(1:k,1:k);Vk = V(:,1:k);relerr = norm(Uk*Sk*Vk'-A)/S(1,1)
Relerr = 0.0357

箭头键

的三个方向键c ^ 5应用程序可以用鼠标左键或右键点击(或者用一键鼠标控制点击)。

  • 左>:下一个文档,任何术语计数。
  • 右>:下一个术语计数非零的文档。
  • 左<:以前的文档,任何术语计数。
  • <:以前的文档,术语计数为非零。
  • 左^:使用当前文档的根目录进行查询。
  • 正确^:使用随机术语进行查询。

使用右按钮反复单击向上箭头(单击alt)是浏览整个集合的好方法。

洛萨Collatz

我们再看两个对数例子。洛萨·科拉茨的日志很短。

c5Collatz
% collatz%箭头文档术语计数lsi日期%的博客/ threenplus1_blog。m 9 9/19 0.904 2015年1月19日% >>博客/ collatz_不等式。m 4 13/19 0.108 2015年3月16日% >> blog/c5_blog。m 5 18/19 0.075 2017年8月28日% >> ncm/intro.tex 1 19/19 -0.003 2004

科拉茨出现在2015年的两个帖子中,一个是他的帖子3 n + 1问题和一个优雅的不等式,产生了一个令人惊讶的图形,在这篇博客文章的部分c ^ 5你现在读到的,他也在介绍NCM的书中提到,但LSI的价值很小。每行开头的双箭头表示右键单击,跳过没有提到他的文档。

21点

我已经写了很多关于纸牌游戏21点的文章。

c521点
% 21点%箭头文档术语计数lsi日期% news/simulating_blackjack.txt 19 19/68 0.536 01- 10月2012% >> ncmm/ncmgui。M 4 23/68 0.372 2016% >> blog/random_blog2。m 4 27/68 0.266 04- 5月2015% >> ncmm/内容。M 2 29/68 0.244 2016% >> blog/c5_blog。m 5 34/68 0.206 2017年8月28日% >> ncm/random.tex 13 47/68 0.148 2004% >> lab/thumbnails2。M 2 49/68 0.088 2017% >> lab/lab2。M 1 50/68 0.061 2017% >> news/numerical_computing.txt 1 51/68 0.025 01- june 2004% >> blog/lab_blog。m 1 52/68 0.004 2016年10月31日% >> ncmm/ 21点。M 8 60/68 -0.023 2016% >>实验室/ 21点。M 8 68/68 -0.026 2017

我们可以看到两个时事通讯专栏、三个博客、一本书章节的一部分、几个代码段和两个21点应用程序副本。同样,我使用的是右键单击。

Levenshtein距离

我最近写了一篇关于编辑字符串之间的距离.如果c ^ 5如果不识别查询中的关键字,则使用Levenshtein距离在术语列表中找到与未识别查询最接近的匹配项。这很容易纠正简单的拼写错误,比如缺少字母。例如,“多项式”中缺失的“i”被纠正为“多项式”。“Levenstein”变成了“levenshtein”。

当我输入“Molar”时,我收到了一个惊喜,以为它会变成“moler”。相反,我得到了“polar”,因为将“Molar”转换为“polar”只需要一次替换,但将“Molar”转换为“moler”需要两次替换。(微软Word曾经把“MATLAB”拼写成“Meatball”。)

多词查询

我不太确定该如何处理包含多个术语的查询。例如,对于“威尔金森多项式”的查询,预期的响应是什么?是包含的文档吗要么“威尔金森”“多项式”?这就是LSI所提供的。但是最好查找包含这两个“威尔金森”而且“多项式”。我不知道该怎么做。

更糟糕的是,我无法找到与两个单词字符串“Wilkinson多项式”完全匹配的字符串,因为设置程序所做的第一件事是将文本分解为单个单词。

阻止

这个项目还没有完成。如果我继续研究它,我将不得不学习阻止而且词元化源文本的。这包括一些相对简单的任务,比如去除所有格和复数,以及更复杂的任务,比如将所有具有相同词根的单词组合在一起引理.这个句子

敏捷的棕色狐狸跳过了懒狗的背。

就变成了

“敏捷的棕色狐狸跳过懒人狗的背”

罗兰的客座博主竹内敏发表一篇文章2015年的《MATLAB潜在语义分析》。他引用MATLAB代码阻止。

解析查询

我可以想象在解析查询方面做得更好,尽管我永远无法达到谷歌或Siri这样复杂的系统。

限制

我写的文章中有很大一部分不是散文,而是数学或代码。它不能用文本分析技术来解析。例如,《NCM》和《EXM》的原始文本中就有数百个类似LaTeX的片段

\begin{equnarray *} A V \eqs U \Sigma, \\ A^H U \eqs V \Sigma^H。结束\ {eqnarray *}

在这篇博客的早些时候,我有

tic [U,S,V] = svd(full(A),'econ');toc

我的c5setup程序现在必须像这样跳过所有内容。在这样做的过程中,它忽略了很多信息。

软件

我已经更新了克里夫的实验室在中央文件交换中包含c5.m而且c5database.mat




发布与MATLAB®R2017a

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。