我\xe2\x80\x99m 通过在索引时指定 TermVector 来使用 Lucene 索引文档集合。\n然后,我通过读取索引并计算每个文档的 TF-IDF 得分向量来检索术语及其频率。然后,使用 TF-IDF 向量,使用维基百科的余弦相似度方程计算文档之间的成对余弦相似度。
\n\n这是我的问题:假设我在这个集合中有两个相同的文档 \xe2\x80\x9cA\xe2\x80\x9d 和 \xe2\x80\x9cB\xe2\x80\x9d (A 和 B 有超过 200 个句子)。如果我计算 A 和 B 之间的成对余弦相似度,它会给出余弦值=1,这是完全可以的。但是,如果我从 Doc \xe2\x80\x9cB\xe2\x80\x9d 中删除单个句子,它会给出这两个文档之间的余弦相似度值约为 0.85。这些文档几乎相似,但余弦值却不同。我知道问题出在 I\xe2\x80\x99m 使用的方程上。
\n\n有没有更好的方法/方程可以用来计算文档之间的余弦相似度?
\n\n已编辑
\n\n这就是我计算余弦相似度的方法,doc1[]并且doc2[]是相应文档的 TF-IDF 向量。向量仅包含scores但不包含words
private double cosineSimBetweenTwoDocs(float doc1[], float doc2[]) {\n double temp;\n int doc1Len = doc1.length;\n int doc2Len = doc2.length;\n float numerator = 0;\n float temSumDoc1 = 0;\n float temSumDoc2 = 0;\n double equlideanNormOfDoc1 …Run Code Online (Sandbox Code Playgroud) # pry / irb example #1
"abc".hash
=> -1883761119486508070
"abc".hash
=> -1883761119486508070
# pry / irb example #2
"abc".hash
=> -4309321811150053495
"abc".hash
=> -4309321811150053495
Run Code Online (Sandbox Code Playgroud)
hash对于特定的调用,该值是常量,但在调用之间会有所不同.为什么?这是设计的吗?这被认为是"好事"吗?
我跑ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.0.0].
在REPL中禁用Clojure断言(包括前置条件和后置条件)有什么好方法?对于Leiningen的任意配置文件?
我想命名空白DataFrame的列名.
我很难(重新)在v0.6中命名DataFrame的多个列.
我试过生成名字:
df = DataFrame()
nms = [":x$i" for i in 1:2]
df[nms[1] = rand(10)]
df[nms[2] = rand(10)]
Run Code Online (Sandbox Code Playgroud)
但名称的符号要求不适用于$宏.有人有修复吗?
我想知道IO在Ruby中使用对象的正确"契约"或最佳实践.
我有一堆辅助方法来传递IO对象.目前,对于使用IO对象的低级方法,我rewind在做完之后确保它们read.这感觉很好; 它允许我多次调用这些方法而不必担心修改IO对象.
以下是合同的一些可能性:
如上所述...如果一个方法调用read一个IO对象 - 或者以另一种方式从中读取 - 那么它应该rewind在完成后进行.这有效地将IO对象恢复到其原始状态.这是由不修改参数的Ruby惯例推动的.
调用方法应该知道低级方法正在调用read并相应地调整.(换句话说:消费者要小心!)
哪个,哪个最好?为什么?
(快速注释:io_copy = io.dup功能不同io.rewind.)
而且......如果你谈论线程安全,你应该获得奖励积分!
我想修改Devise以使其与带有PostgreSQL的UUID主键的users表一起使用.
这是迁移:
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table :users, id: false do |t|
t.uuid :uuid, null: false
# ...
end
change_table :users do |t|
t.index :uuid, unique: true
# ...
end
end
def migrate(direction)
super
if direction == :up
# This is only necessary because the following does not work:
# t.uuid :uuid, primary: true, null: false
execute "ALTER TABLE users ADD PRIMARY KEY (uuid);"
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是User模型:
class User < ActiveRecord::Base
primary_key = :uuid
devise …Run Code Online (Sandbox Code Playgroud) Sublime Text 3的Clojure语法突出显示经常在正则表达式上/之后中断.我看到Anthony Grimes在Sublime Text Forum上发现了这一点:http://sublimetext.userecho.com/topic/82983-clojure-regexes-are-not-parsed-properly/
这个答案有人建议:
内部
Clojure.tmLanguage尝试改变
<string>source.regexp.oniguruma</string>至
<string>#string_escape</string>
但是在哪里Clojure.tmLanguage?在我进行更改后,我是否只是将其保存到位?(请参阅在sublime text 3中放置.tmLanguage的位置?)
我在Sublime Text 3目录中看到了这个:
$ tree -L 1
.
??? Cache
??? Index
??? Installed\ Packages
??? Local
??? Packages
Run Code Online (Sandbox Code Playgroud)
在里面,Cache我看到,Clojure/Clojure.tmLanguage.cache但可能是不对的.
更新:我使用的是Mac OS X 10.9.
更新:我正在查看为ST3存储的.tmLanguage文件在哪里
更新:此处还详细介绍了其他Clojure语法问题:http://www.sublimetext.com/forum/viewtopic.php? f = 3&t = 14077
更新:我尝试Clojure.tmLanguage.cache通过将文件重命名为Clojure.tmLanguage.zip第一个来解压缩文件.那很奇怪; 我得到一个交流和无限循环.cpgz和.zip文件,我尝试解压缩它们.请参阅:discussion.apple.com/thread/1446784