3

我从pdf文档中提取了文本。..我想使用java提取其中的一些特定字段..

文字部分..

US00RE44697E
(i9) 美国
(12) 重新颁发的专利 (10) 专利号:RE44,697 E
Jones 等人。(45) 重新颁发专利日期:2014 年 1 月 7 日
(54) 共享
内存互连的加密
处理器 (75) 发明人:David E.Jones, Ottawa (CA);Cormac
MO'Connell, Carp (CA)
(73) 受让人:Mosaid Technologies Incorporated,
Ottawa, Ontario (CA)
(21) 申请号:13/603,137
(22) 提交日期:2012 年 9 月 4 日
相关美国专利文件
再版的:
(64) 专利号:
颁发:
Appl。编号:
归档:
6,088,800
2000 年 7 月 11 日
09/032,029
1998 年 2 月 27 日
(51) 国际 CI。
G06F 21/00 (2013.01)
(52) 美国 CI。
USPC .............713/189;713/190;713/193;380/28;
380/33;380/52
(58) 分类检索领域

现在我的任务是从中提取字段并提供给字符串..就是

文本(10) Patent Number: RE44,697 E将被提取为String pat_no= " RE44,697 E"

文本(54) ENCRYPTIONPROCESSORWITH SHARED MEMORY INTERCONNECT将被提取为String title= "ENCRYPTIONPROCESSORWITH SHARED MEMORY INTERCONNECT"

极其不规则的文本块

(64) 专利号:
颁发:
Appl. 编号:
归档:
6,088,800
2000 年 7 月 11 日
09/032,029
1998 年 2 月 27 日

必须提取为

String pat_no_org = "6,088,800";
String issued = "jul.11,2000" 
String filed = "feb 27 ,1998"
......

像这样..

我的作品

首先我使用了 string.split , string.substring , string,indexof 甚至 apache string utils ,但没有帮助..因为文本分散,上述方法没有帮助..我也尝试过正则表达式,但因为我非常很弱,我不会编程。

请告诉我如何使用 java 实现我的目标?

4

1 回答 1

2

使用正则表达式,我会将其分为 3 个部分:

1.)(10) Patent Number正则表达式可能如下所示:

\(10\)\s*Patent Number:\s*([\w,]+)

作为java字符串:

"\\(10\\)\\s*Patent Number:\\s*([\\w,]+)"

第一个带括号的组的匹配项将在[1].

  • \s是任何一种white-space简写[ \t\r\n\f]
  • \wword-characters的简写,与in a character class一起使用。[A-Za-z0-9_] ,
  • 一些字符在正则表达式中有特殊含义。他们必须用反斜杠转义。

2.)(54) ENCRYPT...

模式可能如下所示:

(?s)\(54\)\s*(.*?)\s*(?=\(\d|$\))

作为java字符串:

"(?s)\\(54\\)\\s*(.*?)\\s*(?=\\(\\d|$\\))"
  • (?s)s 修饰符等于 Pattern.DOTALL ,其中点也匹配换行符。
  • (?=\(\d|$\))使用前瞻,以匹配任何数量的(.*?) 惰性(字符,直到看到另一个后跟数字|或字符串结尾$(结束)。

3.)对于其他所需的 3 个部分,我将尝试使用模式反映输入的格式。这要求所有数据都是兼容的。模式可能如下所示:

(?s)\(64\).*?Filed:\s*([\d,]+)\s*(\w+\.\s*\d+,\s*\d+)\s*\n[\d+][^\n]+\n\s*(\w+\.\s*\d+,\s*\d+)

作为java字符串:

"(?s)\\(64\\).*?Filed:\\s*([\\d,]+)\\s*(\\w+\\.\\s*\\d+,\\s*\\d+)\\s*\\n[\\d+][^\\n]+\\n\\s*(\\w+\\.\\s*\\d+,\\s*\\d+)"
  • \n匹配换行符。

比赛将在[1]例如6,088,800中,[2]例如Jul. 11, 2000[3]例如Feb. 27, 1998

对于开始使用正则表达式,这一次信息太多了:)

于 2014-01-14T16:56:51.747 回答