- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Java 中的 BreakIterator 类将段落分成句子。这是我的代码:
public Map<String, Double> breakSentence(String document) {
sentences = new HashMap<String, Double>();
BreakIterator bi = BreakIterator.getSentenceInstance(Locale.US);
bi.setText(document);
Double tfIdf = 0.0;
int start = bi.first();
for(int end = bi.next(); end != BreakIterator.DONE; start = end, end = bi.next()) {
String sentence = document.substring(start, end);
sentences.put(sentence, tfIdf);
}
return sentences;
}
问题是当段落包含标题或数字时,例如:
“罗伯茨教授试图通过编写 1.200 行代码来解决问题。”
我的代码将产生的是:
sentences :
Prof
Roberts trying to solve a problem by writing a 1
200 lines of code
由于标题和数字中的句点,而不是 1 个句子。
有没有办法解决此问题以使用 Java 处理标题和数字?
最佳答案
嗯,这是一个有点棘手的情况,我想出了一个棘手的解决方案,但它仍然有效。我自己是 Java 的新手,所以如果经验丰富的老手想要编辑它或评论它并通过各种方式使其更专业,请让我看起来更好。
我基本上在您已经必须检查的内容上添加了一些控制措施,看看是否存在像 Dr. Prof. Mr. Mrs. 等词,如果这些词存在,它就会跳过那个 break 并移动到下一个 break (保持原来的开始位置)寻找 NEXT 结束(最好是不会在另一个 Dr. 或 Mr. 等之后结束)
我包括了我的完整程序,这样你就可以看到它了:
import java.text.BreakIterator;
import java.util.*;
public class TestCode {
private static final String[] ABBREVIATIONS = {
"Dr." , "Prof." , "Mr." , "Mrs." , "Ms." , "Jr." , "Ph.D."
};
public static void main(String[] args) throws Exception {
String text = "Prof. Roberts and Dr. Andrews trying to solve a " +
"problem by writing a 1.200 lines of code. This will " +
"work if Mr. Java writes solid code.";
for (String s : breakSentence(text)) {
System.out.println(s);
}
}
public static List<String> breakSentence(String document) {
List<String> sentenceList = new ArrayList<String>();
BreakIterator bi = BreakIterator.getSentenceInstance(Locale.US);
bi.setText(document);
int start = bi.first();
int end = bi.next();
int tempStart = start;
while (end != BreakIterator.DONE) {
String sentence = document.substring(start, end);
if (! hasAbbreviation(sentence)) {
sentence = document.substring(tempStart, end);
tempStart = end;
sentenceList.add(sentence);
}
start = end;
end = bi.next();
}
return sentenceList;
}
private static boolean hasAbbreviation(String sentence) {
if (sentence == null || sentence.isEmpty()) {
return false;
}
for (String w : ABBREVIATIONS) {
if (sentence.contains(w)) {
return true;
}
}
return false;
}
}
这是做什么的,基本上是建立两个起点。原始起点(您使用的起点)仍在做同样的事情,但临时起点不会移动,除非该字符串看起来已准备好构成一个句子。取第一句:
"Prof."
并检查它是否因为一个奇怪的词而中断(即句子中是否有 Prof. Dr. 或 w/e 可能导致该中断)如果是,则 tempStart 不会移动,它留在那里等待下一个 block 回来。在我稍微详细一点的句子中,下一段也有一个奇怪的词打乱了休息:
"Roberts and Dr."
它接受那个 block ,因为它有一个 Dr. 它继续到第三个句子 block :
"Andrews trying to solve a problem by writing a 1.200 lines of code."
一旦它到达被破坏的第三个 block 并且没有任何可能导致错误破坏的奇怪标题,它就会从临时开始(仍然在开头)到当前结束,基本上将所有三个部分连接在一起.
现在它将临时开始设置为当前“结束”并继续。
就像我说的那样,这可能不是获得您想要的东西的迷人方式,但没有其他人自愿并且它有效耸耸肩
关于java - 将段落拆分为带有标题和数字的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159513/
我的网页上显示了一份简历。其中包含部分(段落),例如教育、经验、项目等,这里是客户 想要通过在网页的段落(节)上拖动鼠标来移动页面上的这些节。我怎样才能实现这个功能。我正在使用 ruby on R
我有一个特定大小的 div,它是图像和两个段落。 都设置了向左浮动 div { width: 400px; height: 400px; } img { float: left; wi
我想完美对齐一段,使整个段落位于页面中央,但左右两边完美对齐。这是一个完美对齐的段落的图片示例: 该段落看起来像是在某种盒子中,左右两边完全笔直。我如何在 css 或 html 中执行此操作? 最佳答
我的 div 中有多个带有段落的项目,我想将它们 chop 为 2 行。我尝试使用高度进行 chop ,但结果会导致单词被 chop 。我无法使用字符,因为在某些情况下单词很长并且会被推到新行。 我正
有没有办法通过 .Net 框架(或有人写过类似的东西)在传递字符串和字典对象时获取匹配数组? 首先是一些背景 我需要 我有运动队的 csv 文件,我将其加载到字典对象中,例如... Team, Var
我需要创建一个程序来计算文本文件中字符的频率以及段落、单词和句子的数量。 我有一个问题,当我的程序输出字母的频率时,程序会为字母表中的每个字母输出多个输出。 输出应该是这样的: 如果输入是“hello
我的 Swing 应用程序中有一个 JTextPane,其上方有一个 JSlider。当我拖动 slider 时,我希望当前具有插入符号的 JTextPane 段落减少/增加其宽度(并相应地调整高度)
有没有办法通过 .Net 框架(或有人写过类似的东西)在传递字符串和字典对象时获取匹配数组? 首先是一些背景 我需要 我有运动队的 csv 文件,我将其加载到字典对象中,例如... Team, Var
假设我有一个文本句子: $body = 'the quick brown fox jumps over the lazy dog'; 我想将该句子放入“关键字”的散列中,但我想允许多单词关键字;我有以
我尝试编写一个服务器-客户端程序。我可以发送协议(protocol)文本并正确获取文本。但是当我尝试解析文本时,我遇到了 Matcher 类的问题。因为它只匹配第一行。那么我怎样才能找到正确的字符串并
由于 WordPress 在所有内容上都添加了段落标签,因此我需要在某些条件下删除段落标签。在这种情况下,我希望它们从图像中消失。我让那部分工作了: $(".scroller img").un
我需要匹配包含三个大括号之间的文本的完整 HTML 段落。 这是我输入的 HTML: {{{Lorem ipsum dolor sit amet. Ut enim ad minim veniam. D
我正在尝试查找大段落(超过一定数量的字符)并将其包装到一个范围内。目前我正在这样做: output.replace(/(\n{2}|^)([^\n{2}]{500,})(\n{2}|$)/mg, '$
所以我有这个模式,它应该提供不同的描述性段落,具体取决于用户从下拉列表中做出的选择。目前它只始终显示所有段落。我希望它在选择“公共(public)”时显示“隐藏”,在选择“内部”时显示“隐藏2”。等等
段落?
JSFiddle Link 我正在使用的 JSFiddle 似乎正是我的元素所需要的。但是,我将如何更改此当前代码以确保每个分段的段落包含相同数量的字符并且所有段落的宽度相同? 任何帮助将不胜感激,尤
我希望我所有的 p 标签继承正文的字体大小——如果我没有在它们上声明字体大小或将它们嵌套在带有字体的父项中,它们会自动执行——尺寸声明。 但是我应该在 CSS 中的 p 中添加 font-size:
警告框作为回显?
Achtung! This alert box indicates a dangerous or potentially negative action.× 所以我创建了自己的警告框,但问
有什么方法可以使用 python-docx 访问和操作文本框中现有 docx 文档中的文本? 我试图通过迭代在文档的所有段落中找到关键字: doc = Document('test.docx') fo
这是在亚马逊电话采访中被问到的——“你能写一个程序(用你喜欢的语言 C/C++/等)在一个大的字符串缓冲区中找到一个给定的词吗?即数字出现次数“ 我仍在寻找我应该给面试官的完美答案。我试着写一个线性搜
当我使用这段代码时,我可以用文本制作图像,但在一行中, function writetext($image_path,$imgdestpath,$x,$y,$angle,$text,$font,$fo
我是一名优秀的程序员,十分优秀!