java - 如何提取文本集合的子字符串?

标签 java regex string extract information-extraction

我从 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] 中。


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/

相关文章:

java - 如何减少此代码/bufferedreader的内存使用

用于 Web 服务的 Java 1.3 库

regex - 为什么 * 正则表达式运算符不起作用?

java - EqualsIgnoreCase() 未按预期工作。

Java 将变量 String[] 与 String 混合在一个字符串数组中

java - 无法使用 driverspy 获取查询字符串

javascript - 正则表达式匹配 domain.com 但不匹配 @domain.com

ruby - 正面/负面和展望 future /展望 future 的困惑?

c# - 使用 C# 哪个更快 - System.Convert.ToString( objThatIsString) 或 (string)objThatIsString?

java - 将字符串转换为套接字