package nlpr.cip;
import java.io.*;
import org.apache.pdfbox.text.*;
import java.util.stream.*;
import java.util.*;
public class TextLocationExtender extends PDFTextStripper
{
public List<Pair> wordSizes;
public TextLocationExtender() throws IOException {
this.wordSizes = new ArrayList<Pair>();
}
@Override
protected void writeString(final String string, final List<TextPosition> textPositions) throws IOException {
float max_font_size = -1.0f;
for (final TextPosition textPosition : textPositions) {
if (textPosition.getFontSizeInPt() > max_font_size && textPosition.getDir() == 0.0 && !string.equals(" ")) {
max_font_size = textPosition.getFontSizeInPt();
}
}
if (max_font_size > 0.0f) {
//System.out.println(string + " " + max_font_size + " " + textPositions.get(0).getX() + " " + textPositions.get(0).getY());
this.wordSizes.add(new Pair(string, max_font_size, textPositions.get(0).getX(), textPositions.get(0).getY()));
}
}
public String getTitle() {
final List<Float> valid_pos = this.get_title_y_position();
final List<String> char_lst = this.wordSizes.stream().filter(x -> valid_pos.contains(x.getY())).map(Pair::getCharacter).collect(Collectors.toList());
final String title = utils.JoinString(char_lst, " ");
return title;
}
private List<Float> get_title_y_position() {
final float max_title_font = this.get_max_font();
//System.out.println(max_title_font);
final Set<Float> output = this.wordSizes.stream().filter(wordSize -> wordSize.getFontSize() >= max_title_font).map(Pair::getY).collect(Collectors.toSet());
// System.out.println(" ");
// for (Float y: output)
// {
// System.out.println(y);
// }
// System.out.println(" ");
final List<Float> valid_position = output.stream().sorted().limit(3L).collect(Collectors.toList());
final List<Float> output_position = new ArrayList<Float>();
float title_size = Float.MIN_VALUE;
for (Float y: valid_position)
{
//System.out.println(y);
//System.out.println("test");
//先找到这个位置的字体大小
for (int i = 0; i < this.wordSizes.size(); i++) {
Pair p = (Pair)this.wordSizes.get(i);
if (p.getY() == y)
{
if (title_size == Float.MIN_VALUE)
{
output_position.add(y);
title_size = p.getFontSize();
//System.out.println(title_size);
}
else if (p.getFontSize() == title_size)
{
output_position.add(y);
}
break;
}
}
}
return output_position;
}
private float get_max_font() {
final List<Float> list = this.wordSizes.stream().map(Pair::getFontSize).distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
//list.forEach(System.out::println);
return list.get(list.size() / 3);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip 基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip (27个子文件)
PdfAutoRenameTools.iml 1KB
项目说明.md 697B
nlpr
cip
GetPaperName.java 2KB
Pair.java 528B
TextLocationExtender.java 3KB
utils.java 1KB
src
nlpr
cip
Pair.java 528B
TextLocationExtender.java 3KB
Main.java 2KB
utils.java 1KB
out
artifacts
PdfAutoRenameTools_jar
PdfAutoRenameTools.jar 9.52MB
production
PdfAutoRenameTools
nlpr
cip
Main.class 4KB
utils.class 2KB
TextLocationExtender.class 5KB
Pair.class 848B
.idea
project-template.xml 89B
description.html 97B
artifacts
PdfAutoRenameTools_jar.xml 778B
misc.xml 491B
compiler.xml 169B
modules.xml 276B
.gitignore 47B
encodings.xml 159B
pdfbox-app-2.0.23.jar 9.46MB
fontbox-3.0.0-RC1.jar 1.52MB
commons-logging-1.2.jar 60KB
META-INF
MANIFEST.MF 49B
共 27 条
- 1
资源评论
- zjmnb2024-03-15资源不错,对我启发很大,获得了新的灵感,受益匪浅。
Make程序设计
- 粉丝: 5626
- 资源: 3567
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功