PDF에서 데이터를 추출하고 특정 카테고리로 분할하려고합니다. PDF에서 데이터를 추출하고 범주에 따라 글꼴을 기준으로 분할 할 수 있습니다. 크기. 예를 들면 : 3 개의 카테고리, 국가 카테고리, 자본 카테고리 및 도시 카테고리가 있다고합시다. 모든 국가, 수도 및 도시를 각각의 범주에 넣을 수 있습니다. 그러나 어떤 자본이 어떤 도시에 속하고 어떤 국가 또는 어떤 국가가 어떤 도시 및 자본에 속하는지 매핑 할 수는 없습니다. * 무작위로 데이터를 읽는 중, 순서를 어기 지 않고 아래에서 위로 데이터를 읽을 수 있으므로 첫 번째 범주에 첫 번째 단어를 넣고 두 번째에 두 번째 단어를 넣을 수 있습니다. *PDF에서 데이터를 추출하고 Java를 사용하여 particluar 카테고리로 분할하는 방법
또는 누구나 좀 더 효율적인 방법을 알고 계십니까? 그래서 각 카테고리에 텍스트를 넣고 매핑 할 수 있습니다.
public class readPdfText {
public static void main(String[] args) {
try{
PdfReader reader = null;
String src = "pdffile.pdf";
try {
reader = new PdfReader("pdfile.pdf");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
SemTextExtractionStrategy smt = new SemTextExtractionStrategy();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
PdfTextExtractor.getTextFromPage(reader, i, smt);
}
}catch(Exception e){
}
}
}
SemTextExtractionStrategy 클래스 :
public class SemTextExtractionStrategy implements TextExtractionStrategy {
private String text;
StringBuffer str = new StringBuffer();
StringBuffer item = new StringBuffer();
StringBuffer cat = new StringBuffer();
StringBuffer desc = new StringBuffer();
float temp = 0;
@Override
public void beginTextBlock() {
}
@Override
public void renderText(TextRenderInfo renderInfo) {
text = renderInfo.getText();
Vector curBaseline = renderInfo.getBaseline().getStartPoint();
Vector topRight = renderInfo.getAscentLine().getEndPoint();
Rectangle rect = new Rectangle(curBaseline.get(0), curBaseline.get(1),
topRight.get(0), topRight.get(1));
float curFontSize = rect.getHeight();
compare(text, curFontSize);
}
private void add(String text2, float curFontSize) {
str.append(text2);
System.out.println("str: " + str);
}
public void compare(String text2, float curFontSize) {
// text2.getFont().getBaseFont().Contains("bold");
// temp = curFontSize;
boolean flag = check(text);
if (temp == curFontSize) {
str.append(text);
/*
* if (curFontSize == 11.222168){ item.append(str);
* System.out.println(item); }else if (curFontSize == 10.420532){
* desc.append(str); }
*/
// str.append(text);
} else {
if (temp>9.8 && temp<10){
String Contry= str.toString();
System.out.println("Contry: "+Contry);
}else if(temp>8 && temp <9){
String itemPrice= str.toString();
System.out.println("itemPrice: "+itemPrice);
}else if(temp >7 && temp< 7.2){
String captial= str.toString();
System.out.println("captial: "+captial);
}else if(temp >7.2 && temp <8){
String city= str.toString();
System.out.println("city: "+city);
}else{
System.out.println("size: "+temp+" "+"str: "+str);
}
temp = curFontSize;
// System.out.println(temp);
str.delete(0, str.length());
str.append(text);
}
}
private boolean check(String text2) {
return true;
}
@Override
public void endTextBlock() {
}
@Override
public void renderImage(ImageRenderInfo renderInfo) {
}
@Override
public String getResultantText() {
return text;
}
}
감사합니다.하지만 일부 코드를 공유해 주시면 제 요구 사항을 충족시킬 수 있습니다. 사실 나는 많은 노력을했지만 어느 곳에도 도달하지 못했습니다. – Shammi
당신의 작업은 정보를 추출하려고하는 PDF에 많이 의존하는 것 같습니다. 따라서 PDF가 없으면보다 효율적인 방법에 대한 요령이 애매하게 남습니다. – mkl