使用 lucene 提取 tf-idf 向量

2023-12-24

我已经使用 lucene 索引了一组文档。我还为每个文档内容存储了 DocumentTermVector。我编写了一个程序并获取每个文档的词频向量,但是如何获取每个文档的 tf-idf 向量?

这是我的代码,用于输出每个文档中的术语频率:

Directory dir = FSDirectory.open(new File(indexDir));
    IndexReader ir = IndexReader.open(dir);
    for (int docNum=0; docNum<ir.numDocs(); docNum++) {
        System.out.println(ir.document(docNum).getField("filename").stringValue());
        TermFreqVector tfv = ir.getTermFreqVector(docNum, "contents");
        if (tfv == null) {
        // ignore empty fields
        continue;
        }
        String terms[] = tfv.getTerms();
        int termCount = terms.length;
        int freqs[] = tfv.getTermFrequencies();

        for (int t=0; t < termCount; t++) {
        System.out.println(terms[t] + " " + freqs[t]);
        }
    }

lucene中有没有内置的函数可以帮助我做到这一点?


没有人帮忙,我自己做的:

    Directory dir = FSDirectory.open(new File(indexDir));
    IndexReader ir = IndexReader.open(dir);

    int docNum;
    for (docNum = 0; docNum<ir.numDocs(); docNum++) {
        TermFreqVector tfv = ir.getTermFreqVector(docNum, "title");
        if (tfv == null) {
                // ignore empty fields
                continue;
        }
        String tterms[] = tfv.getTerms();
        int termCount = tterms.length;
        int freqs[] = tfv.getTermFrequencies();

        for (int t=0; t < termCount; t++) {
            double idf = ir.numDocs()/ir.docFreq(new Term("title", tterms[t]));
            System.out.println(tterms[t] + " " + freqs[t]*Math.log(idf));
        }
    }

有什么办法可以找到每个term的ID号吗?


没有人帮忙,我又自己做了:

    List list = new LinkedList();
    terms = null;
    try
    {
        terms = ir.terms(new Term("title", ""));
        while ("title".equals(terms.term().field()))
        {
        list.add(terms.term().text());
        if (!terms.next())
            break;
        }
    }
    finally
    {
        terms.close();
    }
    int docNum;
    for (docNum = 0; docNum<ir.numDocs(); docNum++) {
        TermFreqVector tfv = ir.getTermFreqVector(docNum, "title");
        if (tfv == null) {
                // ignore empty fields
                continue;
        }
        String tterms[] = tfv.getTerms();
        int termCount = tterms.length;
        int freqs[] = tfv.getTermFrequencies();

        for (int t=0; t < termCount; t++) {
            double idf = ir.numDocs()/ir.docFreq(new Term("title", tterms[t]));
            System.out.println(Collections.binarySearch(list, tterms[t]) + " " + tterms[t] + " " + freqs[t]*Math.log(idf));
        }
    }

您可能找不到 tf-idf 向量。但正如您已经完成的那样,您可以手动计算 IDF。最好使用默认相似度 http://javasourcecode.org/html/open-source/lucene/lucene-3.3.0/org/apache/lucene/search/DefaultSimilarity.html#idf%28int,%20int%29(或您正在使用的任何相似度实现)来为您计算它。

关于Term ID,我认为目前还不能。至少在 Lucene 4.0 之前不会 http://lucene.472066.n3.nabble.com/Numerical-ids-for-terms-td2810724.html, see this http://lucene.apache.org/core/4_1_0/core/org/apache/lucene/index/TermsEnum.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 lucene 提取 tf-idf 向量 的相关文章

  • 仅运行相应源代码已更改的单元测试?

    我正在 Jenkins CI 服务器中运行单元测试和 Selenium 测试 众所周知 在大型项目中测试需要很长时间才能运行 Java 是否有一个工具 框架只能触发其源代码已更改的测试 这是因为并非每次对 SCM 的提交都会影响源代码的所有
  • 合并 2 个 .jks 信任库文件

    我正在使用启用了 SSL 的 Tomcat 并使用信任库进行客户端身份验证 我有两个 jks trustore 文件 第一个 我将其用于 PROD 环境 另一个用于 TEST 环境客户端证书 我在 Tomcat 上部署了 Web 应用程序
  • Java 比 Xmx 参数消耗更多内存

    我有一个非常简单的 Web 服务器类 基于 Java SEHttpServer class 当我使用此命令启动编译的类来限制内存使用时 java Xmx5m Xss5m Xrs Xint Xbatch Test 现在如果我使用检查内存top
  • 在 Gradle 中运行自定义测试任务而无需重新编译

    我有一个 Gradle 自定义测试任务来运行我的集成测试 我希望能够在 Gradle 不自动完成之前的所有阶段并仅运行测试的情况下运行它 有没有办法在每个构建步骤不使用 x 的情况下执行此操作 None
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • 如何在 Android 中签署 AAR Artifacts?

    我目前正在开发一个 AAR android 库 我想用我自己的密钥对已发布的工件进行签名 以便我可以确定我是否发布了具有相同名称和功能的假 aar 注意事项1 我希望能够以编程方式检查我的库的真实性 即使是一个伪造的库 只是伪造了我的 aa
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 是否有适用于 Java 的 CalDAV 客户端库? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 CalDAV 协议与我的日
  • java内存不足然后退出

    我有一个必须分析大文件的软件 限制输入或提供无限内存都不是一个选择 所以我必须忍受飞行的 OOME 因为 OOME 只杀死线程 所以我的软件运行在一些糟糕的状态 从外面看一切都很好 因为进程正在运行 但在内部却是脑死亡 我想拔掉它的插头 但
  • SFTP Java - 管道关闭 Jsch 异常

    我正在研究一种 java 方法 将文件从一个位置复制到另一个远程位置 我的代码如下 我尝试使用jsch 0 1 42 0 1 50 0 1 54 public static void processFiles ArrayList
  • 在 Hibernate 的 XML 配置文件中指定默认值

    我通过映射配置文件配置 Hibernate
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • Spring Boot 中的服务限流能力

    有什么办法可以实现Spring中其余服务的服务限制能力 特别是Spring boot 这里的期望是 我的服务暴露于外界 目前每秒 分钟的服务调用数量没有限制 我们希望通过设置限制来控制这一点 我有一个替代选项 通过跟踪并发哈希映射或任何缓存
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 原子整数的compareandexchange()与compareandset()

    在研究 AtomicInteger 时 我发现这个 API 提供了两种方法 比较和交换 如果当前值被引用 则自动将该值设置为 newValue to 作为见证值 预期值 记忆效应为 由指定VarHandle compareAndExchan
  • 优雅地避免 Java 中的 NullPointerException

    考虑这一行 if object getAttribute someAttr equals true 显然这一行是一个潜在的错误 属性可能是null我们会得到一个NullPointerException 因此我们需要将其重构为以下两个选择之一
  • 如何将字符串解析为map

    有一个像A B C D E F这样的字符串 如何将其解析为map 我会使用拆分 String text A B C D E F Map
  • 如何将元素添加到通用集合

    我想知道如何将专用对象添加到通用集合中 我正在使用以下代码 Collection

随机推荐

  • 使用 PrintWindow API 截取屏幕截图(客户端区域)

    我正在使用 PrintWindow API 截取特定窗口 hwnd 的屏幕截图 这工作得很好 它可以截取整个窗口的屏幕截图 我的问题是 我的窗口高度是 742 宽度是 653 如果我想在窗口中间的某个位置 不是从 0 0 处 截取屏幕截图
  • 关于 GEKKO 中条件语句('m.if3')的问题

    我想在 GEKKO 代码中添加一些条件语句 我用 m if3 添加了以下语句 但是 它返回了语法错误 如果没有条件语句 我就不会出现这种错误 R1 1 m if3 R1 GEKKO m GEKKO remote False print m
  • 访问表达式主体成员以构建表达式树

    尝试使用表达式树按表达式构建订单 但我无法访问查询结果类的表达式主体属性 这是类结构 public class AssetFileRecord IAuditable IEntity INavigateToCustomValues publi
  • 我可以在 CouchDB 中进行事务和锁定吗?

    我需要执行事务 开始 提交或回滚 锁定 选择更新 我怎样才能在文档模型数据库中做到这一点 Edit 案例是这样的 我想经营一个拍卖网站 我还想如何直接购买 在直接购买中 我必须减少项目记录中的数量字段 但前提是数量大于零 这就是为什么我需要
  • 在 O(nlog(n)) 中查找“最大”重叠间隔对

    问题陈述 Inputn 个间隔的集合 s 1 t 1 s 2 t 2 s n t n Output一对间隔 s i t i s j t j 其中maximum所有区间对之间重叠 Example 输入区间 1 10 2 6 3 15 5 9
  • 如何为“扩展类”编写有意义的测试?

    编写有意义的测试的正确方法是什么扩展一个类 https dart dev guides language language tour extending a class与super关键词 class FooBase
  • Android 相机 takePicture 使用预览小缓冲区

    我正在使用 OPENCV 开发一个项目 我在 onCameraFrame 上有一些进程 当它显示预览时 用户可以拍照 但在某些设备中 我在调用 takePicture 方法后出现错误 我应该怎么办 E Camera JNI 11783 Ma
  • 我如何知道短信是否已到达 Twilio 中的目的地

    我正在开发一个网络应用程序 并且我正在使用 twilio 网关发送短信 我需要在我的页面上显示短信的状态 如果短信已发送 那么它将显示已发送 否则它将显示待处理 所以请告诉我如何知道消息是否已送达 以下是示例代码 public class
  • 如何提供一个后备程序集而不是无法加载的程序集?

    在运行时 如果引用的程序集无法加载 例如 强名称验证失败 因为它是测试签名的 有没有办法从另一个真实签名的路径提供替换程序集 我尝试订阅 AppDomain CurrentDomain AssemblyResolve 但它没有被触发 因为
  • 如何在Python 3中将二进制文件转换为列表中的文本文件?

    我正在尝试编写一个 Python 程序 该程序从 LabView 中获取多个二进制文件 从 tkinter 对话框中选择并打开 并将它们转换为可读的文本文件 或 csv 文件 理想情况下 但是 我在二进制到文本转换方面遇到了麻烦 我尝试查看
  • 如何快速比较颜色

    我正在尝试比较颜色 但无法使用isEqual方法 因为我正在尝试比较背景的颜色UICollectionViewCell 在这种情况下比较颜色的正确方法是什么 if cell layer backgroundColor UIColor red
  • 显示旋转轮图像直到整个页面加载

    我正在使用下面的代码 在布局页面的 body 标签内 div img src images user profile ajax loading gif alt Loading div 在起始页中 css div loading height
  • 如何使用 C++ 更改、替换或删除文本文件中的行?

    如何使用 C 更改 替换或删除文本文件中的行 我有一个文本文件 其中包含用户的登录信息 用户名和密码 例如 file Jimmy jim1236 tom tommy545 现在我怎样才能编写一个程序 允许用户在登录系统后更改自己的密码呢 我
  • 使用 csv.reader 的制表符分隔文件未分隔我期望的位置

    我正在尝试使用 Python 循环遍历选举结果的制表符分隔文件 以下代码不起作用 但是当我使用具有相同结果的本地文件 注释掉的行 时 它确实按预期工作 我唯一能想到的是我需要传递网址的一些标头或内容类型 但我无法弄清楚 为什么会发生这种情况
  • 获取 Google BigQuery 中给定月份的总天数?

    我可以创造用户定义函数 https cloud google com bigquery user defined functions并计算给定月份的总天数 有没有直接的方法来获取给定日期的给定月份中的总天数 eg select date t
  • 使用 PIL 时释放内存

    我正在使用 PIL Python 图像库 编辑图像 每一步 转换 旋转 调整大小 都会创建更多图像 文档摘录 返回旋转给定度数的图像的副本 所以我想释放内存 你知道下面的做法是否节省内存 import PIL Image image PIL
  • Socket.io 在两个 Node.js 应用程序之间触发事件?

    我有两台服务器 一台用于后端应用程序 另一台为前端服务 它们是抽象的 但共享相同的数据库 我需要两者使用 socket io 在彼此之间进行实时事件通信 前端 serves a front end website var appPort 9
  • 如何在列上添加隐藏属性?

    创建时态表时 我们需要定义开始和结束日期时间列 这可以是hidden 不可见于SELECT or INSERT without columns 我想再添加一列 其中包含有关已提交更改的用户的信息 问题是 我收到以下错误 Msg 13735
  • 避免在 selenium 调用期间打开远程服务器上的浏览器

    我使用 webdriver 编写了一个 Selenium 应用程序 我希望在远程服务器上运行它 当我通过 putty 以及 Xming 登录服务器来做到这一点时 selenium 会尝试仅在服务器上打开浏览器并通过外部显示器加载页面 然而
  • 使用 lucene 提取 tf-idf 向量

    我已经使用 lucene 索引了一组文档 我还为每个文档内容存储了 DocumentTermVector 我编写了一个程序并获取每个文档的词频向量 但是如何获取每个文档的 tf idf 向量 这是我的代码 用于输出每个文档中的术语频率 Di