我从 pdf 文档中提取文本。 ..我想使用java提取其中的一些特定字段..
文字部分..
US00RE44697E
(i9) United States
(12) Reissued Patent (10) Patent Number: RE44,697 E
Jones et al. (45) Date of ReissuedPatent: Jan. 7, 2014
(54) ENCRYPTIONPROCESSORWITH SHARED
MEMORY INTERCONNECT
(75) Inventors: David E.Jones, Ottawa (CA); Cormac
M.O'Connell, Carp (CA)
(73) Assignee: Mosaid Technologies Incorporated,
Ottawa, Ontario (CA)
(21) Appl.No.: 13/603,137
(22) Filed: Sep. 4, 2012
Related U.S. Patent Documents
Reissue of:
(64) Patent No.:
Issued:
Appl. No.:
Filed:
6,088,800
Jul. 11, 2000
09/032,029
Feb. 27, 1998
(51) Int.CI.
G06F 21/00 (2013.01)
(52) U.S. CI.
USPC .............713/189; 713/190; 713/193; 380/28;
380/33; 380/52
(58) Field of Classification Search
None
现在我的任务是从中提取字段并赋予字符串..就是
文本 (10) Patent Number: RE44,697 E
将被提取为 String pat_no= "RE44,697 E"
文本 (54) ENCRYPTIONPROCESSORWITH SHARED
MEMORY INTERCONNECT
将被提取为 String title= "ENCRYPTIONPROCESSORWITH SHARED
内存互连”
极其不规则的文本 block
(64) Patent No.:
Issued:
Appl. No.:
Filed:
6,088,800
Jul. 11, 2000
09/032,029
Feb. 27, 1998
必须提取为
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 实现我的目标?
最佳答案
使用正则表达式,我会将其分为 3 部分:
1.) (10) Patent Number
正则表达式可能如下所示:
\(10\)\s*Patent Number:\s*([\w,]+)
作为 java 字符串:
"\\(10\\)\\s*Patent Number:\\s*([\\w,]+)"
第一个括号组的匹配项将在 [1]
中。
\s
是 shorthand对于[\t\r\n\f]
任何类型的空白。\w
是 shorthand对于[A-Za-z0-9_]
word-characters,连同,
在 character class 中.- 有些角色有special meanings在正则表达式中。它们必须用反斜杠转义。
2.) (54) 加密...
模式可能如下所示:
(?s)\(54\)\s*(.*?)\s*(?=\(\d|$\))
作为 java 字符串:
"(?s)\\(54\\)\\s*(.*?)\\s*(?=\\(\\d|$\\))"
(?s)
s modifier等于 Pattern.DOTALL,其中点也匹配换行符。(?=\(\d|$\))
lookahead用于匹配(.*?)
lazy任意数量的任何字符,直到看到另一个(
后跟数字|
或字符串结尾$
(anchor 表示结束)。
3.) 对于其他所需的 3 个部分,我会尝试用模式反射(reflect)输入的格式。这要求所有数据的构造都是兼容的。模式可能如下所示:
(?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]
例如七月。 11、2000 和 [3]
例如二月。 1998 年 27 日。
对于开始使用正则表达式,一次信息太多了:)
关于java - 如何提取文本集合的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21116826/