예제 #1
0
def test():
    sample_str = [
        "江西省南昌市东湖区中大青山湖花园25栋1单元202室", "遵义市红花岗区海尔大道东方星城B4-27-4",
        "上海春城闵行区莲花南路1108弄39号502,陈斌 ,188 2120 0363", "湖南省长沙市雨花区万科金域华府一期8栋202",
        "福建省鼓楼区软件大道89号", "上海市浦东新区张杨路1515弄国际华城12号2903室"
    ]
    my_cpca = CPCATransformer(myumap.umap)
    addr_final = my_cpca.transform(sample_str)
    print(addr_final)
def transform(location_strs, umap=myumap):
    """将地址描述字符串转换以"省","市","区"信息为列的DataFrame表格
        Args:
            locations:地址描述字符集合,可以是list, Series等任意可以进行for in循环的集合
                      比如:["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]
            umap:自定义的区级到市级的映射,主要用于解决区重名问题,如果定义的映射在模块中已经存在,则会覆盖模块中自带的映射
        Returns:
            一个Pandas的DataFrame类型的表格,如下:
               |省    |市   |区    |
               |上海市|上海市|徐汇区|
               |福建省|泉州市|洛江区|
            
    """
    from chinese_province_city_area_mapper.transformer import CPCATransformer
    cpca = CPCATransformer(umap)
    return cpca.transform(location_strs)
예제 #3
0
def address_extract(data_raw):

    data = data_raw.copy()
    cpca = CPCATransformer(myumap.umap)
    nr = data['受理内容'].str.findall(r'(?:^|\n)([^【^】].+)')
    quxian = data['受理内容'].str.findall(r'【区/县】([^【^】^\r^\n]+)')
    luming = data['受理内容'].str.findall(r'【路名】([^【^】^\r^\n]+)')
    data['区/县'] = quxian.str.get(0)
    data['路名'] = luming.str.get(0)
    data['受理正文内容'] = nr.str.join('')
    data['受理正文内容'] = data['受理正文内容'].str.strip()
    addr_df = cpca.transform(data["受理正文内容"]).reindex(columns=['省', '市', '区'])
    data = pd.concat([data, addr_df], axis=1)
    data['街道'] = data.apply(mymap, axis=1)
    processed = data.apply(mix_addr, axis=1)
    processed.drop(['区/县', '路名', '受理正文内容'], axis=1, inplace=True)
    return processed
예제 #4
0
파일: prices.py 프로젝트: wanli6a/ncpSpider
def get_city_name():
    cur = conn.cursor()
    cur.execute("select * from test")
    print('共有', cur.rowcount, '条数据')
    results = cur.fetchall()
    for r in results:
        location_str = [r[2]]
        cpca = CPCATransformer({"朝阳区": "北京市"})  #遇到多个朝阳区则统一映射到北京市
        df2 = cpca.transform(location_str)
        df2.to_sql(
            name='try',
            con=engine,
            if_exists='append',
            index=False,
            index_label=False,
        )
    cur.close()
def transform(location_strs, umap=myumap, index=[]):
    """将地址描述字符串转换以"省","市","区"信息为列的DataFrame表格
        Args:
            locations:地址描述字符集合,可以是list, Series等任意可以进行for in循环的集合
                      比如:["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]
            umap:自定义的区级到市级的映射,主要用于解决区重名问题,如果定义的映射在模块中已经存在,则会覆盖模块中自带的映射
            index:可以通过这个参数指定输出的DataFrame的index,默认情况下是range(len(data))
        Returns:
            一个Pandas的DataFrame类型的表格,如下:
               |省    |市   |区    |地址                 |
               |上海市|上海市|徐汇区|虹漕路461号58号楼5楼  |
               |福建省|泉州市|洛江区|万安塘西工业区        |
            
    """
    from chinese_province_city_area_mapper.transformer import CPCATransformer
    cpca = CPCATransformer(umap)
    # loc这里的作用纯粹是为了让输出结果更好看一些
    return cpca.transform(location_strs, index).loc[:, ('区', '市', '省', '地址')]
예제 #6
0
def location_count(oriText: str):  # ԭ�Ľ���
    # ������ֳ�list
    clauseList = punc_clauseList(oriText)
    # ��list�еõ��ص�   �ص㴦��--ֱ�Ӳ�ȫ��default��3����ȡ��γ��
    locationDF = CPCATransformer().transform(clauseList)  # dataFrame
    # �ص�������
    locationList = [repr(tuple(x)) for x in locationDF.values]
    dict2 = dict(Counter(locationList))
    dict2.pop("('', '', '')", 0)
    return dict2
예제 #7
0
def mix_addr(df):
    import re
    rigion_sub = ['区', '县', '市', '', '域', '岛', '旗']
    cpca = CPCATransformer(myumap.umap)
    for sub in rigion_sub:
        quxian = str(df['区/县']) + sub
        addr_all = cpca.transform(pd.Series(quxian))
        if addr_all['区'].iloc[0]:
            break
    lum = re.compile(r'^[\u4e00-\u9fa5].*')
    addr_all = addr_all.iloc[0]
    if not df['区'] and not df['市']:
        df['区'] = addr_all['区']
        df['市'] = addr_all['市']
        df['省'] = addr_all['省']
    elif not df['区'] and df['市']:
        df['区'] = addr_all['区']
    if not df['街道']:
        if re.match(lum, str(df['路名'])):
            df['街道'] = df['路名']
    return df
예제 #8
0
def transform(location_strs, umap=myumap, index=[], cut=True, lookahead=8):
    """将地址描述字符串转换以"省","市","区"信息为列的DataFrame表格
        Args:
            locations:地址描述字符集合,可以是list, Series等任意可以进行for in循环的集合
                      比如:["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区"]
            umap:自定义的区级到市级的映射,主要用于解决区重名问题,如果定义的映射在模块中已经存在,则会覆盖模块中自带的映射
            index:可以通过这个参数指定输出的DataFrame的index,默认情况下是range(len(data))
            cut:是否使用分词,默认使用,分词模式速度较快,但是准确率可能会有所下降
            lookahead:只有在cut为false的时候有效,表示最多允许向前看的字符的数量
                      默认值为8是为了能够发现"新疆维吾尔族自治区"这样的长地名
                      如果你的样本中都是短地名的话,可以考虑把这个数字调小一点以提高性能
        Returns:
            一个Pandas的DataFrame类型的表格,如下:
               |省    |市   |区    |地址                 |
               |上海市|上海市|徐汇区|虹漕路461号58号楼5楼  |
               |福建省|泉州市|洛江区|万安塘西工业区        |
            
    """
    from chinese_province_city_area_mapper.transformer import CPCATransformer
    cpca = CPCATransformer(umap)
    # loc这里的作用纯粹是为了让输出结果更好看一些
    return cpca.transform(location_strs, index, cut, lookahead).loc[:, ('区','市','省','地址')]
예제 #9
0
        "上海春城闵行区莲花南路1108弄39号502,陈斌 ,188 2120 0363", "湖南省长沙市雨花区万科金域华府一期8栋202",
        "福建省鼓楼区软件大道89号", "上海市浦东新区张杨路1515弄国际华城12号2903室"
    ]
    my_cpca = CPCATransformer(myumap.umap)
    addr_final = my_cpca.transform(sample_str)
    print(addr_final)


if __name__ == '__main__':
    # test()
    if len(sys.argv) < 2:
        print("请按照格式输入:CityFilter [Excel文件路径]")
    city_location_str = []
    df = pd.read_excel(sys.argv[1], usecols=[0])
    data = df.loc[:]
    print("读取指定行的数据:\n{0}".format(data))
    for raw in df.values:
        str = ''.join(raw)
        city_location_str.append(str)
    print("开始解析省市区数据,请稍等......\n")
    # df_addr = pd.DataFrame(transform(city_location_str, open_warning=False, lookahead=20))
    my_cpca = CPCATransformer(myumap.umap)
    my_cpca.umap = {"鼓楼区": "南京市", "大理市": "大理市", "朝阳区": "北京市"}
    df_addr = pd.DataFrame(my_cpca.transform(city_location_str))
    print("数据处理完毕,分类显示如下:\n")
    print(df_addr)
    df_addr.insert(loc=0, column="原始收发地址", value=city_location_str)
    print(">>> 正在生成新的Excel地址簿,请稍等... <<<")
    df_addr.to_excel("ReNewAddress.xlsx", sheet_name="renew")
    print(">>> Excel生成结束 <<<")