Release Word Extraction Tool v0.41: 增加DBSchema出现频率项

* 也请参考新发布的v0.42 修复bug。
发布 Word Extractor v0.42:错误修复 – 生产力技能 (prodskill.com)

在之前分发的词提取工具(v0.40)中补充添加和提取DBSchema出现频率项的功能后分发。 DBSchema_Freq 项通知词源分布了多少个 DB-Schemas。

参考: 分词工具(一):分词工具概述

1. 分词工具结果变化

之前分发的工具的词提取结果示例如下。

▼ 更改前的“词频”表示例 (v0.40)

单词频率来源
代码110DB1.OWNER1.COMTCADMINISTCODE.ADMINIST_ZONE_CODE(行政区域代码)
DB1.OWNER1.COMTCADMINISTCODERECPTNLOG.CHANGE_SE_CODE(更改标识码)
DB1.OWNER1.COMTCADMINISTCODERECPTNLOG.CTPRVN_CODE(尝试代码)
……
数字103DB1.OWNER1.COMTCADMINISTCODERECPTNLOG.OPERT_SN(作业流水号)
DB1.OWNER1.COMTCZIP.ZIP(邮政编码)
DB1.OWNER1.COMTHCONFMHISTORY.CONFM_NO(批准号)
……
人数88DB1.OWNER1.COMTNADBKMANAGE.ADBK_NM(地址簿名称)
DB1.OWNER1.COMTCCMMNCLCODE.CL_CODE_NM(分类代号)
DB1.OWNER1.COMTCCMNDETAILCODE.CODE_NM(代号)
……
更改前的“词频”表示例

DBSchema_Freq 项添加到从 v0.41 提取的结果中,如下所示。

▼ 更改后的“词频”表示例 (v0.41)

单词频率来源DBSchema_Freq
代码110DB1.OWNER1.COMTCADMINISTCODE.ADMINIST_ZONE_CODE(行政区域代码)
DB1.OWNER1.COMTCADMINISTCODERECPTNLOG.CHANGE_SE_CODE(更改标识码)
DB1.OWNER1.COMTCADMINISTCODERECPTNLOG.CTPRVN_CODE(尝试代码)
……
10
数字103DB1.OWNER1.COMTCADMINISTCODERECPTNLOG.OPERT_SN(作业流水号)
DB1.OWNER1.COMTCZIP.ZIP(邮政编码)
DB1.OWNER1.COMTHCONFMHISTORY.CONFM_NO(批准号)
……
9
人数88DB1.OWNER1.COMTNADBKMANAGE.ADBK_NM(地址簿名称)
DB1.OWNER1.COMTCCMMNCLCODE.CL_CODE_NM(分类代号)
DB1.OWNER1.COMTCCMNDETAILCODE.CODE_NM(代号)
……
5
更改后的“词频”表示例

DBSchema_Freq 项通知词源分布了多少个 DB-Schemas。可以更详细地提供选择标准候选词所需的信息。

  • 当频率(Freq)高但DBSchema频率(DBSchema_Freq)低时
    • 该词仅在特定的 DB-Schema 中密集出现
  • 当频率(Freq)和DBSchema频率(DBSchema_Freq)都很高时
    • 这个词均匀分布在整个 DB-Schema 中
  • 当频率(Freq)较低但DBSchema频率(DBSchema_Freq)相对较高时
    • 该词被审查为包含而不是排除在规范词候选者中

2.源码改动

三个函数发生了变化。

2.1.更改了 get_db_comment_text 函数

添加第343行:在包含文本提取结果的dataframe变量df_text中创建一个DBSchema列并创建一个值。

    df_text['DBSchema'] = df_text['DB'] + '.' + df_text['Schema']  # DB.Schema 값 생성(2023-02-19)

2.2.更改 get_word_list 函数

添加第104、111行:将DBSchema值添加到分词结果dataframe

            if len(words) >= 1:
                # print(nouns, text)
                for word in words:
                    # print(noun, '\t', text)
                    if not is_db:
                        # sr_text = Series([file_name, file_type, page, text, word],
                        #                  index=['FileName', 'FileType', 'Page', 'Text', 'Word'])
                        df_word = DataFrame(
                            {'FileName': [file_name], 'FileType': [file_type], 'Page': [page], 'Text': [text],
                             'Word': [word], 'Source': [source]})
                    elif is_db_table:
                        # sr_text = Series([file_name, file_type, page, text, word, db, schema, table],
                        #                  index=['FileName', 'FileType', 'Page', 'Text', 'Word', 'DB', 'Schema', 'Table'])
                        df_word = DataFrame(
                            {'FileName': [file_name], 'FileType': [file_type], 'Page': [page], 'Text': [text],
                             'Word': [word], 'DB': [db], 'Schema': [schema], 'Table': [table “” not found /]
, 'Source': [source], 'DBSchema': [db_schema]}) elif is_db_column: # sr_text = Series([file_name, file_type, page, text, word, db, schema, table, column], # index=['FileName', 'FileType', 'Page', 'Text', 'Word', 'DB', 'Schema', 'Table', 'Column']) df_word = DataFrame( {'FileName': [file_name], 'FileType': [file_type], 'Page': [page], 'Text': [text], 'Word': [word], 'DB': [db], 'Schema': [schema], 'Table': [table “” not found /]
, 'Column': [column], 'Source': [source], 'DBSchema': [db_schema]})

2.3.更改主函数

2.3.1.变更前的主要功能内容

    # df_group = pd.DataFrame(df_result.groupby(by='Word').size().sort_values(ascending=False))
    df_result_subset = df_result[['Word', 'Source']]  # 빈도수를 구하기 위해 필요한 column만 추출
    # df_group = df_result_subset.groupby(by='Word').agg(['count', lambda x: list(x)])
    df_group = df_result_subset.groupby(by='Word').agg(['count', lambda x: '\n'.join(list(x)[:10])])
    df_group.index.name = 'Word'  # index명 재지정
    df_group.columns = ['Freq', 'Source']  # column명 재지정

2.3.2.变更后的主要功能内容

    df_group = df_result.groupby('Word').agg({
        'Word': 'count',
        'Source': lambda x: '\n'.join(list(x)[:10]),
        'DBSchema': 'nunique'
    }).rename(columns={
        'Word': 'Freq',
        'Source': 'Source',
        'DBSchema': 'DBSchema_Freq'
    })

这段代码对df_result中的词(word)进行分组,df_result是一个dataframe变量,作为词提取的结果(groupby),得到去除重复的DBSchema值的个数(nunique),并将该项命名为DBSchema_Freq。

作为参考,这段代码是我写的测试代码。 聊天GPT这是提供给并要求简化的代码。在简化之前,它是一个复杂的代码,分为两个数据框,分别应用 lambda 和 nunique,然后将它们合并为一个。最近 聊天GPT 佩服能力

2.4. v0.41 中更改的源代码的完整详细信息

您可以在下面的 github 链接中查看更改的详细信息。

https://github.com/DAToolset/ToolsForDataStandard/commit/b4b241b87f8cbf702087a33ad76302535640cf37?diff=split

v0.41에서 달라진 소스코드 내용
在 v0.41 中更改了源代码内容

3. 下载并运行词提取工具 (v0.41)

您可以在下面的链接中查看更改后的 word_extractor.py 文件。

DAToolset/ToolsForDataStandard (github.com) 中的 ToolsForDataStandard/word_extractor.py

执行方式同v0.40。请参考以下信息。


词提取工具 v0.41 未经过充分测试,可能会引入错误或错误。请在评论中留下任何错误、错误、查询等。

3 条回复

  1. 头像照片 김기영说道:

    你好!

    当使用从没有DB注释的文件中提取单词的方法时,这是三种执行方法之一
    (python word_extractor.py –in_path .\in –out_path .\out)

    txt, word, ppt 全部

    miniconda3\envs\wordextr\lib\site-packages\pandas\core\apply.py”,第 601 行,在 normalize_dictlike_arg raise KeyError(f”Column(s) {cols_sorted} 不存在”)

    KeyError:“列 ['DBSchema'] 不存在”

    它正在退出并出现错误。

    输入 DB 注释文件的执行方法 2 和 3 没有错误。

    我把 'DBSchema': [db_schema] 放在第 97 行,但是这次

    在 get_grouper raise KeyError(gpr) KeyError: 'Word' 错误被显示。

    谢谢

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文