是否有python正则表达式来查找街道名称,然后是一个或多个人,然后是门牌号码?

时间:2019-10-30 12:14:46

标签: python regex text nlp nltk

我有一个要从中提取文本数据的图像数据集。我将文本作为字符串,但现在想将此文本分成更结构化的形式。

数据如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" name="data[]" value="1" />1
<input type="checkbox" name="data[]" value="2" />2
<input type="checkbox" name="data[]" value="3" />3
<input type="checkbox" name="data[]" value="4" />4
<input type="checkbox" name="data[]" value="5" />5
<input type="checkbox" name="data[]" value="6" />6
<input type="checkbox" name="data[]" value="7" />7
<input type="checkbox" name="data[]" value="8" />8
<input type="checkbox" name="data[]" value="9" />9
<input type="checkbox" name="data[]" value="10" />10

如您所见,它涉及街道名称,后跟代表(N / S / E / W / NW / SE等)的字母,然后是人名和门牌号。

到目前为止,我一直在使用python NLTK。我可以使用以下方式提取街道,名称和数字作为单个实体:

Camden Row,Camberwell, S.E—A. Massey, M.D.4.

Campden Hill, Kensington.
(Hornton House).

Campden Hill Road, Kensington.
James, M.D. 6.

Canning Town. E—R. J. Carey (Widdicombe-
co ee

Cannon Street. E.C.—R. Cresswell, 151.

Cannon Street Road. E.—R. W. Lammiman, 106.
—J. R. Morrison, 57.—B. R. Rygate, 126.—
J. J. Rygate, M.B. 126.

Canonbury N. (see foot note)—J. Cheetham, M.D.
(Springjield House),

Canonbury Lane, N.—H. Bateman,
Roberts, 10.—J. Rose, 3.

我想要实现的是以下列表:

tagged = nltk.pos_tag(tokens)

例如:

[street name, person, house_number]

我的计划是使用街道名称作为起点的锚点,然后使用数字作为末尾的锚点,但是由于每条街道上有多个门牌号码,所以这有点复杂。

有人可以建议一种可能适用于此的方法/正则表达式吗?

请多谢! 詹姆斯。

1 个答案:

答案 0 :(得分:0)

如果格式一致,则可以拆分字符串。

text = "Cannon Street Road. E.—R. W. Lammiman, 106.—J. R. Morrison, 57.—B. R. Rygate, 126.—J. J. Rygate, M.B. 126."
text = text.split("—")
infos = list()
streetname = text[0]

for i in text[1:]:
    infos.append([streetname, i])

print(infos)

结果是: [['加农街路。 E。”,“ R。 W. Lammiman,106。'],['Cannon Street Road。 E。”,“ J。 R. Morrison,57。'],['Cannon Street Road。 E。”,“ B。 R. Rygate,126。'],['Cannon Street Road。 E。”,“ J。 J.Rygate,工商管理硕士126。']]