根据标签对一行中的每个句子进行评分并总结文本。 (爪哇)

2023-12-25

我正在尝试用 Java 创建一个摘要器。我正在使用斯坦福对数线性词性标注器 http://nlp.stanford.edu/software/tagger.shtml标记单词,然后,对于某些标记,我对句子进行评分,最后在摘要中,我打印具有高分值的句子。 这是代码:

    MaxentTagger tagger = new MaxentTagger("taggers/bidirectional-distsim-wsj-0-18.tagger");

    BufferedReader reader = new BufferedReader( new FileReader ("C:\\Summarizer\\src\\summarizer\\testing\\testingtext.txt"));
    String line  = null;
    int score = 0;
    StringBuilder stringBuilder = new StringBuilder();
    File tempFile = new File("C:\\Summarizer\\src\\summarizer\\testing\\tempFile.txt");
    Writer writerForTempFile = new BufferedWriter(new FileWriter(tempFile));


    String ls = System.getProperty("line.separator");
    while( ( line = reader.readLine() ) != null )
    {
        stringBuilder.append( line );
        stringBuilder.append( ls );
        String tagged = tagger.tagString(line);
        Pattern pattern = Pattern.compile("[.?!]"); //Find new line
        Matcher matcher = pattern.matcher(tagged);
        while(matcher.find())
        {
            Pattern tagFinder = Pattern.compile("/JJ"); // find adjective tag
            Matcher tagMatcher = tagFinder.matcher(matcher.group());
            while(tagMatcher.find())
            {
                score++; // increase score of sentence for every occurence of adjective tag
            }
            if(score > 1)
                writerForTempFile.write(stringBuilder.toString());
            score = 0;
            stringBuilder.setLength(0);
        }

    }

    reader.close();
    writerForTempFile.close();

上面的代码不起作用。不过,如果我削减我的工作并为每一行(而不是句子)生成分数,它就会起作用。但摘要不是这样生成的,不是吗? 这是代码:(所有声明与上面相同)

while( ( line = reader.readLine() ) != null )
        {
            stringBuilder.append( line );
            stringBuilder.append( ls );
            String tagged = tagger.tagString(line);
            Pattern tagFinder = Pattern.compile("/JJ"); // find adjective tag
            Matcher tagMatcher = tagFinder.matcher(tagged);
            while(tagMatcher.find())
            {
                score++;  //increase score of line for every occurence of adjective tag
            }
            if(score > 1)
                writerForTempFile.write(stringBuilder.toString());
            score = 0;
            stringBuilder.setLength(0);
        }

EDIT 1:

有关 MaxentTagger 功能的信息。显示其功能的示例代码:

import java.io.IOException;

import edu.stanford.nlp.tagger.maxent.MaxentTagger;

public class TagText {
    public static void main(String[] args) throws IOException,
            ClassNotFoundException {

        // Initialize the tagger
        MaxentTagger tagger = new MaxentTagger(
                "taggers/bidirectional-distsim-wsj-0-18.tagger");

        // The sample string
        String sample = "This is a sample text";

        // The tagged string
        String tagged = tagger.tagString(sample);

        // Output the result
        System.out.println(tagged);
    }
}

Output:

This/DT is/VBZ a/DT sample/NN sentence/NN

EDIT 2:

修改后的代码使用 BreakIterator 来查找断句。但问题仍然存在。

while( ( line = reader.readLine() ) != null )
        {
            stringBuilder.append( line );
            stringBuilder.append( ls );
            String tagged = tagger.tagString(line);
            BreakIterator bi = BreakIterator.getSentenceInstance();
            bi.setText(tagged);
            int end, start = bi.first();
            while ((end = bi.next()) != BreakIterator.DONE)
            {
                String sentence = tagged.substring(start, end);
                Pattern tagFinder = Pattern.compile("/JJ");
                Matcher tagMatcher = tagFinder.matcher(sentence);
                while(tagMatcher.find())
                {
                    score++;
                }
                scoreTracker.add(score);
                if(score > 1)
                    writerForTempFile.write(stringBuilder.toString());
                score = 0;
                stringBuilder.setLength(0);
                start = end;
            }

查找句子中断可能比仅仅查找 [.?!] 更复杂一些,请考虑使用中断迭代器 http://docs.oracle.com/javase/6/docs/api/java/text/BreakIterator.html.getSentenceInstance()

它的性能实际上与 LingPipe 的(更复杂)实现非常相似,并且比 OpenNLP 中的实现更好(至少从我自己的测试来看)。

示例代码

BreakIterator bi = BreakIterator.getSentenceInstance();
bi.setText(text);
int end, start = bi.first();
while ((end = bi.next()) != BreakIterator.DONE) {
    String sentence = text.substring(start, end);
    start = end;
}

Edit

我认为这就是您正在寻找的:

    Pattern tagFinder = Pattern.compile("/JJ");
    BufferedReader reader = getMyReader();
    String line = null;
    while ((line = reader.readLine()) != null) {
        BreakIterator bi = BreakIterator.getSentenceInstance();
        bi.setText(line);
        int end, start = bi.first();
        while ((end = bi.next()) != BreakIterator.DONE) {
            String sentence = line.substring(start, end);
            String tagged = tagger.tagString(sentence);
            int score = 0;
            Matcher tag = tagFinder.matcher(tagged);
            while (tag.find())
                score++;
            if (score > 1)
                writerForTempFile.println(sentence);
            start = end;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据标签对一行中的每个句子进行评分并总结文本。 (爪哇) 的相关文章

  • Spring JDBC 模板。如何获取pl/sql脚本的结果变量

    我正在使用 NamedParameterJdbcTemplate 来运行 pl sql 脚本 但我不知道如何获取out变量的值 id out 提前致谢 String script declare begin if myFunc id in
  • 中断并标签,“标签 MyLabel 丢失”

    我有这样的代码 if condition1 break MyLabel while true some code here MyLabel if condition2 break more code here 我收到此错误 标签 MyLab
  • 有没有更简单的方法来分割/重建字符串?

    目前我正在使用String split 像这样 String tmp props get i getFullName split String name for int j 1 j lt tmp length j if j gt 1 nam
  • 从另一个进程捕获 system.out 消息

    我有一个 JVM 1 它启动 JVM 2 我希望能够在 JVM 1 中监视来自 JVM 2 的 System out println 调用 直接的方法是 JVM A 执行系统命令来启动 JVM B 然后 JVM A 读取 B 的所有输出 S
  • 如何将完整的日期格式拆分为日期和时间?

    我有很多格式为我的示例所示的字符串 我必须解析它们 我正在尝试确定今天是哪根弦 我的问题是 时间快到了 我只需要比较那个日期 接下来我想检查时间是否在 after 和 before 的两个时间戳 HH mm ss 之间 但存在问题 日期几乎
  • Glassfish 4 - JDBC 领域

    Glassfish 4 中的密码加密算法和摘要算法有什么区别 因为Password加密算法不能为空 所以我使用了MD5 Encoding使用了Hex 摘要算法为空 因此默认为 SHA 256 但是 如果我使用 JAAS 制作一个简单的登录应
  • AMQP Spring 集成错误处理

    我的集成流程如下所示 Bean public IntegrationFlow auditFlow Qualifier eventLoggingConnectionFactory ConnectionFactory connectionFac
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • Java ArrayList 和 HashMap 动态

    有人可以提供一个创建Java的例子吗ArrayList and HashMap在飞行中 所以而不是做一个add or put 实际上在类实例化时为数组 哈希提供种子数据 举个例子 类似于 PHP 的例子 array array 3 1 2
  • Java 声音可视化器

    我正在尝试制作一个java声音可视化工具 但我完全不知道如何在实时处理音频后立即从提取的音频中获取字节 我可以将程序与 wav 文件同步 但这不是我想要做的 我想用程序生成声音 然后播放它 而不将其保存在任何地方 谢谢您的帮助 本文可以帮助
  • 不使用 length() 方法的字符串长度[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在不使用字符串的情况下找到字符串的长度length String类的方法 str toCharArray length应该管用 或者怎么
  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。 -- Netbeans、Postgresql 8.4 和 Glassfish

    我正在尝试使用 EclipseLink 在 Glassfish 中使用 JPA 编辑 Postgresql 中的表 当我插入一个实体时 它运行良好 但是 当我尝试编辑或删除同一实体时 它失败并出现以下错误 任何想法 Caused by Ex
  • 空检查时可能未初始化错误

    我正在检查变量是否已初始化 但此时 netbeans 给了我variable reader might not have been initialized警告 我该如何解决 抑制这个问题 这是我的代码 摘要 final Reader rea
  • java中什么是静态接口?

    我正在阅读Map Entry界面 当我注意到它是一个static界面 我不太明白什么是静态接口 它与常规接口有什么不同 public static interface Map Entry
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList

随机推荐

  • ActionView::缺少模板

    将 mysite 部署到 VPS 后 我遇到此运行时错误 请注意 在我的本地计算机中 一切正常 当我尝试访问控制器路由的任何视图时 假设 Posts Controller index 我收到这个错误 Completed 500 Intern
  • 将数据帧传递给函数时,pandas 何时进行引用传递和值传递?

    def dropdf copy df df df drop y axis 1 def dropdf inplace df df drop y axis 1 inplace True def changecell df df y 0 99 x
  • dotnet test > 有没有办法显示在控制台中运行的测试列表?

    跑步时dotnet test 有没有办法显示在控制台中运行的所有测试的列表而不是某些输出文件 在控制台中看到这样的列表是理想的 x test1 test2 test3 x test4 而不仅仅是总体测试统计数据 运行 失败 跳过 我在 ma
  • 如何执行 URL 中没有 .php 扩展名的 PHP 网页?

    抱歉 菜鸟问题 无法理解我应该搜索的内容 我正在用该页面创建一个网站product php id 777我希望它是product 777 谢谢你 在您的 Web 根目录中创建 htaccess 文件并在其中输入以下内容 Options Fo
  • UICollectionView 滚动到项目不适用于水平方向

    我有一个UICollectionView在一个UIViewController启用分页 由于某种奇怪的原因 collectionView scrollToItem工作时的方向collectionview is vertical但当方向为ho
  • python:无意中修改传递给函数的参数

    有几次我不小心修改了函数的输入 由于 Python 没有恒定的引用 我想知道什么编码技术可以帮助我避免经常犯这种错误 Example class Table def init self fields raw data fields is a
  • 除非您更新 Google Play 服务,否则此应用将无法运行

    我现在一直在不断尝试让 Android V2 的谷歌地图能够工作 我正在设备上尝试此操作 Samsung Galaxy S 2 3 3 和模拟器 我的清单 我尝试过同时使用 Debug 键和 Release 键
  • C# 可以从派生类调用基类属性

    我有一个基类 其属性具有 setter 方法 有没有一种方法可以从派生类调用基类中的 setter 并为其添加更多功能 就像我们使用 base 关键字覆盖方法一样 抱歉 我应该添加一个例子 这是一个例子 希望我做对了 public clas
  • Linux 中 mmap 物理内存的用户空间 memcpy 性能较差

    在我的计算机上安装的 192GB RAM 中 我有 188GB RAM 以上 4GB 硬件地址 0x100000000 由 Linux 内核在启动时保留 mem 4G memmap 188G 4G 数据采集 内核模块使用 DMA 将数据累积
  • Java POI:如何读取Excel单元格值而不是公式计算?

    我正在使用 Apache POI API 从 Excel 文件中获取值 除了包含公式的单元格之外 一切都运行良好 事实上 cell getStringCellValue 返回单元格中使用的公式 而不是单元格的值 我尝试使用evaluateF
  • 使用 equals 方法比较字符串并 == [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中比较字符串 https stackoverflow com questions 513832 how do i compare strings in java Java Strin
  • 如何使用 tqdm 迭代列表

    我想知道处理某个列表需要多长时间 for a in tqdm list1 if a in list2 do something 但这不起作用 如果我使用for a in tqdm range list1 我将无法检索列表值 你知道怎么做吗
  • 无法从 Django Docker 实例内部访问项目绝对 url

    我有一个使用 Cookiecutter Django 启动的项目 目前我正在添加 WeasyPrint 以将某些视图作为 PDF 文件提供 这在开发中运行良好 Cookiecutter Django 使用 Caddy 作为 HTTP 服务器
  • 禁止实例化为临时对象 (C++)

    我喜欢在 C 中使用哨兵类 但我似乎有一种精神困扰 导致反复编写如下错误 MySentryClass arg other code 不用说 这会失败 因为哨兵在创建后立即死亡 而不是按预期在作用域结束时死亡 有没有某种方法可以防止 MySe
  • Django CreateView 不保存对象

    我正在使用基本的博客应用程序练习 django 基于类的视图 然而 由于某种原因 我的 Post 模型的 CreateView 没有将帖子保存在数据库中 模型 py class Post models Model user models F
  • 如何正确使用头文件成为一个完整的类?

    初学者程序员 我遵循工作正常的头文件的样式 但我试图弄清楚在编译时如何不断收到所有这些错误 我正在 Cygwin 中使用 g 进行编译 Ingredient h 8 13 error expected unqualified id befo
  • 进化算法:最优重新群体分解

    这确实是标题中的全部内容 但对于任何对进化算法感兴趣的人来说 这里有一个细分 在 EA 中 基本前提是随机生成一定数量的有机体 实际上只是参数集 针对问题运行它们 然后让表现最好的有机体生存下来 然后 你会重新填充幸存者的杂交品种 幸存者的
  • 如何在 pandas 数据框中执行不同值的累积和

    我有一个像这样的数据框 id date company 123 2019 01 01 A 224 2019 01 01 B 345 2019 01 01 B 987 2019 01 03 C 334 2019 01 03 C 908 201
  • Delphi中从C DLL获取字符串返回值

    我有一个用 C 编写的遗留 DLL 其中包含一个返回字符串的函数 我需要从 Delphi 访问该函数 我所掌握的有关 DLL 的唯一信息是用于访问该函数的 VB 声明 公开声明函数 DecryptStr Lib strlib Str As
  • 根据标签对一行中的每个句子进行评分并总结文本。 (爪哇)

    我正在尝试用 Java 创建一个摘要器 我正在使用斯坦福对数线性词性标注器 http nlp stanford edu software tagger shtml标记单词 然后 对于某些标记 我对句子进行评分 最后在摘要中 我打印具有高分值