資訊抽取之街道抽取

2021-10-20 03:24:08 字數 3789 閱讀 3715

從給定的語料中抽取出相應的道路資訊。

資料

向塘北大道西50公尺

天龍路與龍華路交叉口北50公尺

觀瀾大道490號附近

成都市錦江區海椒市街13號附7號

玉蘭西路

團結北路23號

湖塘鎮火炬北路12號

昆明市晉寧區莊蹺西路28

金水路合作路28-1號

長公大道浙江顯家門業閬中總**旁

安陽街道嶺下東路4號樓

萬頃沙珠江街珠江東路169號

**大街萬達廣場a座一層a17

梅亭路18號民生銀行旁

北京市四川西路

輸出

向塘北大道西50公尺 -> 塘北大道

北京市四川西路 -> 四川西路

現有工具包先詞性標註,然後觀察資料總結規則。(通用方法+規則)

在1的基礎上,積累領域詞,然後利用這類詞標註一些資料,然後構建自己領域ner模型。

第一種方案實現:

"""

@desc:

en:the ****** code of road name extration

cn:簡單街道抽取指令碼

@author:peter

@mail:[email protected]

@date:2021/2/24

@note:

該指令碼可能存在問題,但由於目前資料就這麼多所以就先這樣吧,僅供參考。

"""import pkuseg

import jieba

from jieba import posseg

deftokenize_pku

(word)

:return tokenizer.cut(word)

deftokenize_jieba

(word)

: ret = posseg.cut(word)

return

[(word.word,word.flag)

for word in ret]

use_pku_tokenizer=

true

tokenize =

none

if use_pku_tokenizer:

tokenizer = pkuseg.pkuseg(postag=

true

) tokenize = tokenize_pku

else

:#jieba準確率有限。

tokenize = tokenize_jieba

data=

"""向塘北大道西50公尺

天龍路與龍華路交叉口北50公尺

觀瀾大道490號附近

成都市錦江區海椒市街13號附7號

玉蘭西路

團結北路23號

湖塘鎮火炬北路12號

昆明市晉寧區莊蹺西路28

金水路合作路28-1號

長公大道浙江顯家門業閬中總**旁

安陽街道嶺下東路4號樓

萬頃沙珠江街珠江東路169號

**大街萬達廣場a座一層a17

梅亭路18號民生銀行旁

北京市四川西路"""

.split(

"\n"

)data=

[line.strip(

)for line in data]

#資料pos_cands =

[tokenize(line)

for line in data]

road_keywords =

["街"

,"大道"

,"路",]

defcheck

(word)

:#檢測是否為街道路

for w in road_keywords:

if w in word:

return

true

return

false

defcheck_city

(word)

:#檢測是否為城市

keywords=

["省"

,"市"

,"區"

,"街道"

,"縣"

,"村"

,"鎮"

]for key in keywords:

if word.endswith(key)

:return

true

return

false

deffind_road

(pos_cands,verbose=

false):

""" 道路組合形式:n+n

v+ns

ns+n

ns+nsnsn

j+nn+n

args:

pos_cands:list,e.g. [("北京","ns")]

"""res =

pre_idx =-1

pre_pos =

"" text =

""if verbose:

print

(pos_cands)

for idx,

(word,pos)

inenumerate

(pos_cands)

:#過濾地區詞

if pos==

"ns"

and check_city(word)

:continue

#總結規律,寫規則

if pre_pos in

["v"

,"j"

,"n"

,"a"

,"ns"

]and pos in

["ns"

,"n"]:

if check(word)

: text+=word

text =

"" pre_pos=

""else

: text=word

pre_pos=pos

pre_idx=idx

elif check(word)

and pos in

["ns"

,"n"]:

pre_idx=idx

elif pos in

["v"

,"j"

,"n"

,"a"]:

# print(word)

text+=word

pre_idx=idx

pre_pos=pos

elif pos in

["ns"

,"n"]:

# print(word)

text+=word

pre_idx=idx

pre_pos=pos

else

: pre_idx= idx

pre_pos=

""if text:

real_res =

for word in res:

for key in road_keywords:

if key in word:

return real_res

for cand in pos_cands:

print

(find_road(cand)

)# print(find_road(pos_cands[-4],true))

**在這也有乙份。

Python資訊抽取之亂碼解決

就事論事,直說自己遇到的情況,和我不一樣的路過吧,一樣的就看看吧 資訊抓取,用python,beautifulsoup,lxml,re,urllib2,urllib2去獲取想要抽取的頁面內容,然後使用lxml或者beautifulsoup進行解析,插入mysql 具體的內容,好了貌似很簡單很easy...

Java抽取網頁資訊

使用正規表示式及字串操作,抽取網頁資訊 去script public static string trimscript string content return result 去除注釋 public static string trimcomment string content return r...

資訊抽取 短語提取

短語提取 在資訊抽取領域,另一項重要的任務就是提取中文短語,也即固定多字詞表達串的識別。短語提取經常用於搜尋引擎的自動推薦,文件的簡介生成等。其顆粒度介於單詞和句子之間,nlp一系列任務的顆粒度排序如下 短語的顆粒度 短語提取 利用互資訊和左右資訊熵,我們可以輕鬆地將新詞提取演算法拓展到短語提取。只...