【问题标题】:How to extract sub-strings for a collection of text?如何提取文本集合的子字符串?
【发布时间】:2014-01-14 15:06:23
【问题描述】:

我从 pdf 文档中提取了文本。 .. 我想使用 java..

提取其中的一些特定字段

文本部分..

US00RE44697E
(i9) 美国
(12) 重发专利 (10) 专利号:RE44,697 E
Jones 等人。 (45) 日期 重发专利:2014 年 1 月 7 日
(54) ENCRYPTIONPROCESSORWITH SHARED
MEMORY INTERCONNECT
(75) 发明人:David E.Jones,渥太华 (加利福尼亚州); Cormac
M.O'Connell, Carp (CA)
(73) 受让人:Mosaid Technologies Incorporated,
安大略省渥太华 (CA)
(21) 申请号:13/603,137
(22) 归档日期:2012 年 9 月 4 日
美国相关 专利文献
再颁发:
(64) 专利号:
颁发:
应用。编号:
归档:
6,088,800
2000 年 7 月 11 日
09/032,029
1998 年 2 月 27 日
(51) Int.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 实现我的目标?

【问题讨论】:

  • 欢迎来到stackoverflow!我认为如果您发布您尝试过的正则表达式并在失败的地方写下它会有所帮助。
  • mkyong.com/regular-expressions/…我阅读了这个网站并申请了一些..但很挣扎

标签: java regex string extract information-extraction


【解决方案1】:

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

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

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

作为 java 字符串:

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

第一个括号组的匹配项将在 [1] 中。


2.) (54) ENCRYPT...

模式可能如下所示:

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

作为 java 字符串:

"(?s)\\(54\\)\\s*(.*?)\\s*(?=\\(\\d|$\\))"
  • (?s) s modifier 等于 Pattern.DOTALL 点也匹配换行符。
  • (?=\(\d|$\)) 使用 lookahead 来匹配 (.*?) lazy 任意数量的任意字符,直到另一个 ( 后跟一个数字 | 或字符串结尾 $anchor 结束)见过。

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] 例如七月。 2000 年 11 月 11 日[3] 例如二月。 1998 年 1 月 27 日.

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

【讨论】:

  • 感谢您的详细回答@Jonny 5
  • @user3190934 在堆栈上,我们接受并投票而不是感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多