Wortextraktionstool(5): Beschreibung des Quellcodes des Wortextraktionstools(2)

Als Fortsetzung des vorherigen Artikels werden wir uns den Quellcode des in Python implementierten Wortextraktionstools ansehen.

Dies ist eine Fortsetzung des vorherigen Artikels.

Wortextraktionstool(4): Beschreibung des Quellcodes des Wortextraktionstools(1)

4. Quellcode des Wortextraktionstools

4.3. get_file_text-Funktion

def get_file_text(file_name) -> DataFrame:
    """
    MS Word, PowerPoint, Text, DB Comment(Excel) file에서 text를 추출하는 함수
    :param file_name: 파일명
    :return: file에서 추출한 text(DataFrame type)
    """
    df_text = DataFrame()
    if file_name.endswith(('.doc', '.docx')):
        df_text = get_doc_text(file_name)
    elif file_name.endswith(('.ppt', '.pptx')):
        df_text = get_ppt_text(file_name)
    elif file_name.endswith('.txt'):
        df_text = get_txt_text(file_name)
    elif file_name.endswith(('.xls', '.xlsx', '.xlsb')):
        df_text = get_db_comment_text(file_name)
    return df_text
  • Zeilen 357 bis 365: Führt die entsprechende Funktion entsprechend der Dateiendung aus und gibt das Ergebnis in df_text zurück.

Die Beschreibung jeder auszuführenden Funktion gemäß der Dateierweiterung lautet wie folgt.

4.3.1. get_doc_text-Funktion

def get_doc_text(file_name) -> DataFrame:
    """
    doc 파일에서 text를 추출하여 DataFrame type으로 return
    :param file_name: 입력 파일명 (str type)
    :return: 입력 파일에서 추출한 text
    """
    # :return: 입력 파일에서 추출한 text에 형태소 분석기로 명사 추출한 DataFrame
    start_time = time.time()
    print('\r\nget_doc_text: %s' % file_name)
    word_app = win32com.client.Dispatch("Word.Application")
    word_file = word_app.Documents.Open(file_name, True)
    # result = []
    df_text = pd.DataFrame()
    page = 0
    for paragraph in word_file.Paragraphs:
        text = paragraph.Range.Text
        page = paragraph.Range.Information(3)  # 3: wdActiveEndPageNumber(Text의 페이지번호 확인)
        if text.strip() != '':
            sr_text = Series([file_name, 'doc', page, text, f'{file_name}:{page}:{text}'],
                             index=['FileName', 'FileType', 'Page', 'Text', 'Source'])
            df_text = df_text.append(sr_text, ignore_index=True)

    word_file.Close()
    print('text count: %s' % str(df_text.shape[0]))
    print('page count: %d' % page)
    end_time = time.time()
    # elapsed_time = end_time - start_time
    elapsed_time = str(datetime.timedelta(seconds=end_time - start_time))
    print('[pid:%d] get_doc_text elapsed time: %s' % (os.getpid(), elapsed_time))
    # return get_word_list(df_text)
    return df_text
  • Zeile 193: Erstellen Sie eine Instanz des MS Word-Programms mit dem win32com-Paket. Wenn MS Word nicht läuft, wird dieser Code ausgeführt.
  • Zeile 194: Öffnen Sie die .doc- oder .docx-Datei in der oben erstellten MS-Word-Programminstanz.
  • Zeile 198: Durchlaufen Sie den Absatz des Inhalts der Datei.
  • Zeile 199: Extrahieren Sie den Text aus dem Inhalt des Absatzes.
  • Zeile 200: Extrahieren Sie die Seitenzahl des aktuellen Absatzes. In Range.Information(3) entspricht „3“ dem Wert der wdActiveEndPageNumber-Konstante. mehr Details WdInformation-Aufzählung (Word) | Microsoft-Docssehen
  • Zeilen 202 bis 204: Machen Sie aus dem extrahierten Text ein Series-Objekt und fügen Sie es der Zeile des df_text-Datenrahmens hinzu.
  • Zeile 214: Gibt einen df_text zurück, der den aus der Datei extrahierten Text enthält.

4.3.2. get_ppt_text-Funktion

def get_ppt_text(file_name) -> DataFrame:
    """
    ppt 파일에서 text를 추출하여 DataFrame type으로 return
    :param file_name: 입력 파일명 (str type)
    :return: 입력 파일에서 추출한 text
    """
    # :return: 입력 파일에서 추출한 text에 형태소 분석기로 명사 추출한 DataFrame
    start_time = time.time()
    print('\r\nget_ppt_text: %s' % file_name)
    ppt_app = win32com.client.Dispatch('PowerPoint.Application')
    ppt_file = ppt_app.Presentations.Open(file_name, True)
    # result = []
    df_text = pd.DataFrame()
    page_count = 0
    for slide in ppt_file.Slides:
        slide_number = slide.SlideNumber
        page_count += 1
        for shape in slide.Shapes:
            shape_text = []
            text = ''
            if shape.HasTable:
                col_cnt = shape.Table.Columns.Count
                row_cnt = shape.Table.Rows.Count
                for row_idx in range(1, row_cnt + 1):
                    for col_idx in range(1, col_cnt + 1):
                        text = shape.Table.Cell(row_idx, col_idx).Shape.TextFrame.TextRange.Text
                        if text != '':
                            text = text.replace('\r', ' ')
                            shape_text.append(text)
            elif shape.HasTextFrame:
                for paragraph in shape.TextFrame.TextRange.Paragraphs():
                    text = paragraph.Text
                    if text != '':
                        shape_text.append(text)
            for text in shape_text:
                if text.strip() != '':
                    sr_text = Series([file_name, 'ppt', slide_number, text, f'{file_name}:{slide_number}:{text}'],
                                     index=['FileName', 'FileType', 'Page', 'Text', 'Source'])
                    df_text = df_text.append(sr_text, ignore_index=True)
    # print(result)
    ppt_file.Close()
    # print(df_result)
    print('text count: %s' % str(df_text.shape[0]))
    print('page count: %d' % page_count)
    # print(df_text.head(10))
    # print(df_result.Paragraph)
    # return df_result
    end_time = time.time()
    # elapsed_time = end_time - start_time
    elapsed_time = str(datetime.timedelta(seconds=end_time - start_time))
    print('[pid:%d] get_ppt_text elapsed time: %s' % (os.getpid(), elapsed_time))
    # return get_word_list(df_text)
    return df_text
  • Zeile 138: Erstellen Sie eine Instanz des MS Powerpoint-Programms mit dem win32com-Paket. Wenn MS Powerpoint nicht läuft, wird dieser Code ausgeführt.
  • Zeile 139: Öffnen Sie die .ppt- oder .pptx-Datei in der oben erstellten MS Powerpoint-Programminstanz.
  • Zeile 143: Durchlaufen Sie die Folien in der Datei.
  • Zeile 146: Iterieren Sie durch die Form jeder Folie.
  • Zeilen 149~157: Wenn die Abbildung eine Tabelle ist, wird Text aus jeder Zelle der Tabelle extrahiert.
  • Zeilen 158~162: Wenn die Abbildung keine Tabelle ist, aber Text enthält, wird Text extrahiert.
  • Zeilen 163 bis 167: Machen Sie aus dem extrahierten Text ein Series-Objekt und fügen Sie es der Zeile des df_text-Datenrahmens hinzu.
  • Zeile 181: Gibt einen df_text zurück, der den aus der Datei extrahierten Text enthält.

4.3.3. get_txt_text-Funktion

def get_txt_text(file_name) -> DataFrame:
    """
    txt 파일에서 text를 추출하여 DataFrame type으로 return
    :param file_name: 입력 파일명 (str type)
    :return: 입력 파일에서 추출한 text
    """
    # :return: 입력 파일에서 추출한 text에 형태소 분석기로 명사 추출한 DataFrame
    start_time = time.time()
    print('\r\nget_txt_text: ' + file_name)
    df_text = pd.DataFrame()
    line_number = 0
    with open(file_name, 'rt', encoding='UTF8') as file:
        for text in file:
            line_number += 1
            if text.strip() != '':
                sr_text = Series([file_name, 'txt', line_number, text, f'{file_name}:{line_number}:{text}'],
                                 index=['FileName', 'FileType', 'Page', 'Text', 'Source'])
                df_text = df_text.append(sr_text, ignore_index=True)
    print('text count: %d' % df_text.shape[0])
    print('line count: %d' % line_number)
    end_time = time.time()
    # elapsed_time = end_time - start_time
    elapsed_time = str(datetime.timedelta(seconds=end_time - start_time))
    print('[pid:%d] get_txt_text elapsed time: %s' % (os.getpid(), elapsed_time))
    # return get_word_list(df_text)
    return df_text
  • Zeile 228: Öffnen Sie die Datei im schreibgeschützten Textmodus mit UTF8-Codierung. (mode='rt')
  • Zeile 229: Iteriere durch die Dateizeilen.
  • Zeilen 231–234: Machen Sie aus dem Zeilentext ein Series-Objekt und fügen Sie es der Zeile des df_text-Datenrahmens hinzu.
  • Zeile 242: Gibt einen df_text zurück, der den aus der Datei extrahierten Text enthält.

4.3.4. get_db_comment_text-Funktion

def get_db_comment_text(file_name) -> DataFrame:
    """
    db_comment 파일에서 text를 추출하여 DataFrame type으로 return
    :param file_name:  입력 파일명 (str type)
    :return: 입력 파일에서 추출한 text
    """
    # :return: 입력 파일에서 추출한 text에 형태소 분석기로 명사 추출한 DataFrame
    start_time = time.time()
    print('\r\nget_db_comment_text: %s' % file_name)
    excel_app = win32com.client.Dispatch('Excel.Application')
    full_path_file_name = os.path.abspath(file_name)
    excel_file = excel_app.Workbooks.Open(full_path_file_name, True)

    # region Table comment
    table_comment_sheet = excel_file.Worksheets(1)
    last_row = table_comment_sheet.Range("A1").End(-4121).Row  # -4121: xlDown
    table_comment_range = 'A2:D%s' % (str(last_row))
    print('table_comment_range : %s (%d rows)' % (table_comment_range, last_row - 1))
    table_comments = table_comment_sheet.Range(table_comment_range).Value2
    df_table = pd.DataFrame(list(table_comments),
                            columns=['DB', 'Schema', 'Table', 'Text'])
    df_table['FileName'] = full_path_file_name
    df_table['FileType'] = 'table'
    df_table['Page'] = 0
    df_table = df_table[df_table.Text.notnull()]  # Text 값이 없는 행 제거
    df_table['Source'] = df_table['DB'] + '.' + df_table['Schema'] + '.' + df_table['Table'] \
                         + '(' + df_table['Text'].astype(str) + ')'
    # print(df_table)
    # endregion

    # region Column comment
    column_comment_sheet = excel_file.Worksheets(2)
    last_row = column_comment_sheet.Range("A1").End(-4121).Row  # -4121: xlDown
    column_comment_range = 'A2:E%s' % (str(last_row))
    print('column_comment_range : %s (%d rows)' % (column_comment_range, last_row - 1))
    column_comments = column_comment_sheet.Range(column_comment_range).Value2
    df_column = pd.DataFrame(list(column_comments),
                             columns=['DB', 'Schema', 'Table', 'Column', 'Text'])
    df_column['FileName'] = full_path_file_name
    df_column['FileType'] = 'column'
    df_column['Page'] = 0
    df_column = df_column[df_column.Text.notnull()]  # Text 값이 없는 행 제거
    df_column['Source'] = df_column['DB'] + '.' + df_column['Schema'] + '.' + df_column['Table'] \
                          + '.' + df_column['Column'] + '(' + df_column['Text'].astype(str) + ')'
    # print(df_column)
    # endregion

    excel_file.Close()
    df_text = df_column.append(df_table, ignore_index=True)
    # print(df_text)
    end_time = time.time()
    # elapsed_time = end_time - start_time
    elapsed_time = str(datetime.timedelta(seconds=end_time - start_time))
    print('[pid:%d] get_db_comment_text elapsed time: %s' % (os.getpid(), elapsed_time))
    print('text count: %s' % str(df_text.shape[0]))
    # return get_word_list(df_text)
    return df_text
  • Zeile 300: Erstellen Sie eine Instanz des Programms MS Excel mit dem Paket win32com. Wenn MS Excel nicht läuft, wird es mit diesem Code ausgeführt.
  • Zeile 302: Öffnen Sie die .xls- oder .xlsx-Datei in der oben erstellten MS-Excel-Programminstanz.
  • Zeilen 305 bis 317: Text wird aus dem ersten Blatt der Excel-Datei extrahiert, in dem Tabellenkommentare gespeichert sind.
  • Zeile 306: Holen Sie sich die letzte Zeilennummer des Tabellenkommentarblatts. In Range("A1").End(-4211).Row ist "-4211" die "xlDown"-Konstante. mehr Details XlDirection-Aufzählung (Excel) | Microsoft-Docs Siehe Dokumentation.
  • Zeile 309: Lesen Sie den Inhalt des Tabellenkommentarblatts in die Variable table_comments ein. Diese Methode ist eine Methode, um den Inhalt von Range sofort in den Speicher zu lesen, ohne eine Schleife zu verwenden. VBA-Codierungsmuster: Bereichsschleife - Lesen Siehe Inhalt. Obwohl dieser Artikel in Excel VBA erklärt wird, kann er fast genauso in Python mit OLE-Automatisierung angewendet werden.
  • Zeilen 310-317: Konvertieren Sie table_comments in DataFrame df_table und fügen Sie Daten aus den Spalten „FileName“, „FileType“, „Page“, „Source“ hinzu.
  • Zeilen 322~334: Text wird aus dem zweiten Blatt der Excel-Datei extrahiert, in dem Spaltenkommentare gespeichert sind.
  • Zeile 323: Ruft die letzte Zeilennummer des Spaltenkommentarblatts ab. Verwenden Sie dieselbe Methode wie in Zeile 306.
  • Zeile 326: Lesen Sie den Inhalt des Spaltenkommentarblatts in die Variable column_comments ein. Verwenden Sie dieselbe Methode wie in Zeile 309.
  • Zeilen 327-334: Konvertieren Sie column_comments in DataFrame df_column und fügen Sie Daten aus den Spalten „FileName“, „FileType“, „Page“, „Source“ hinzu.
  • Zeile 339: Verketten Sie df_column und df_table, um df_text zu bilden.
  • Zeile 347: Gibt df_text zurück, der den Text enthält, der aus der Excel-Datei extrahiert wurde, in der die DB-Tabelle und die Spaltenkommentare gespeichert sind.

4.3.5. get_hwp_text-Funktion

def get_hwp_text(file_name) -> DataFrame:
    pass

Derzeit nicht implementiert. Es wird bei Bedarf in Zukunft implementiert.

4.3.6. get_pdf_text-Funktion

def get_pdf_text(file_name) -> DataFrame:
    pass

derzeit nicht implementiert Es wird bei Bedarf in Zukunft implementiert.

4.4. get_word_list-Funktion

Dies ist die wichtigste Funktion des Wortextraktionstools.

def get_word_list(df_text) -> DataFrame:
    """
    text 추출결과 DataFrame에서 명사를 추출하여 최종 output을 DataFrame type으로 return
    :param df_text: 파일에서 추출한 text(DataFrame type)
    :return: 명사, 복합어(1개 이상의 명사, 접두사+명사+접미사) 추출결과(Dataframe type)
    """
    start_time = time.time()
    df_result = DataFrame()

    tagger = Mecab()
    # tagger = Komoran()
    row_idx = 0
    for index, row in df_text.iterrows():
        row_idx += 1
        if row_idx % 100 == 0:  # 100건마다 현재 진행상태 출력
            print('[pid:%d] current: %d, total: %d, progress: %3.2f%%' %
                  (os.getpid(), row_idx, df_text.shape[0], round(row_idx / df_text.shape[0] * 100, 2)))
        file_name = row['FileName']
        file_type = row['FileType']
        page = row['Page']
        text = str(row['Text'])
        source = (row['Source'])
        is_db = True if row['FileType'] in ('table', 'column') else False
        is_db_table = True if row['FileType'] == 'table' else False
        is_db_column = True if row['FileType'] == 'column' else False
        if is_db:
            db = row['DB']
            schema = row['Schema']
            table = row['Table']
            if is_db_column:
                column = row['Column']

        if text is None or text.strip() == '':
            continue
        try:
            # nouns = mecab.nouns(text)
            # [O]ToDo: 연속된 체언접두사(XPN), 명사파생접미사(XSN) 까지 포함하여 추출
            # [O]ToDo: 명사(NNG, NNP)가 연속될 때 각각 명사와 연결된 복합명사 함께 추출
            text_pos = tagger.pos(text)
            words = [pos for pos, tag in text_pos if tag in ['NNG', 'NNP', 'SL']]  # NNG: 일반명사, NNP: 고유명사
            pos_list = [x for (x, y) in text_pos]
            tag_list = [y for (x, y) in text_pos]
            pos_str = '/'.join(pos_list) + '/'
            tag_str = '/'.join(tag_list) + '/'
            iterator = re.finditer('(NNP/|NNG/)+(XSN/)*|(XPN/)+(NNP/|NNG/)+(XSN/)*|(SL/)+', tag_str)
            for mo in iterator:
                x, y = mo.span()
                if x == 0:
                    start_idx = 0
                else:
                    start_idx = tag_str[:x].count('/')
                end_idx = tag_str[:y].count('/')
                sub_pos = ''
                # if end_idx - start_idx > 1 and not (start_idx == 0 and end_idx == len(tag_list)):
                if end_idx - start_idx > 1:
                    for i in range(start_idx, end_idx):
                        sub_pos += pos_list[i]
                    # print('%s[sub_pos]' % sub_pos)
                    words.append('%s[복합어]' % sub_pos)  # 추가 형태소 등록

            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]}) 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]}) # df_result = df_result.append(sr_text, ignore_index=True) # Todo: append를 concat으로 바꾸기 df_result = pd.concat([df_result, df_word], ignore_index=True) except Exception as ex: print('[pid:%d] Exception has raised for text: %s' % (os.getpid(), text)) print(ex) print( '[pid:%d] input text count:%d, extracted word count: %d' % (os.getpid(), df_text.shape[0], df_result.shape[0])) end_time = time.time() # elapsed_time = end_time - start_time elapsed_time = str(datetime.timedelta(seconds=end_time - start_time)) print('[pid:%d] get_word_list finished. total: %d, elapsed time: %s' % (os.getpid(), df_text.shape[0], elapsed_time)) return df_result
  • Zeile 35: Erstellen Sie ein natürlichsprachliches Mecab-Stemmer-Objekt. Wenn Sie einen anderen Tagger als Mecab verwenden möchten, ändern Sie hier den Paketnamen.
  • Zeile 38: Durchlaufen Sie die Zeilen des DataFrame df_text.
  • Zeile 64: Führen Sie Wortart-Tagging der Wortstammerkennung mit der pos-Funktion aus. Inhalte, die sich auf die Wortartkennzeichnung beziehen, werden separat organisiert.
    • Die Wortart-Markierungsfunktion pos zerlegt die Eingabezeichenfolge in Wortarteneinheiten und gibt eine Zeichenfolge zurück, in der jede Einheit gekennzeichnet ist.
    • Wenn der Text beispielsweise „Benutzer definieren funktionale und nicht funktionale Anforderungen“ lautet, lautet das Ausführungsergebnis der pos-Funktion „[(‘use‘, ‚NNG‘), (‘character‘, ‚XSN‘), (‘ is', 'JX'), ('function', 'NNG'), ('enemy', 'XSN'), ('request', 'NNG'), ('spec', 'NNG' '), ( 'and', 'JC'), ('b', 'XPN'), ('feature', 'NNG'), ('enemies', 'XSN'), ('request', 'NNG'), ( 'Ding', 'NNG'), ('zu', 'JKO'), ('Definition', 'NNG'), ('sollte', 'XSV+EF'), ('.', 'SF') ]'.
    • Unter den im obigen Beispiel markierten Wortarten ist „NNG“ ein gebräuchliches Substantiv, „XSN“ ist ein von einem Substantiv abgeleitetes Suffix, „JX“ ist ein Hilfswort, „JC“ ist ein Bindewort, „XPN“ ist ein Präfix , „JKO“ ist ein objektiver Partikel, „XSV + EF“ ist ein von einem Verb abgeleitetes Suffix + Endung und „SF“ bedeutet einen Punkt/Fragezeichen/Ausrufezeichen.
  • Zeile 65: Wählen Sie gemeinsame Substantive (NNG), Eigennamen (NNP) und Fremdsprachen (SL) aus, die die am besten geeigneten Wortartkandidaten als Standardwortkandidaten aus dem Ergebnis der Wortartmarkierung sind. Fremdsprache (SL) wurde zum Extrahieren einer aus Alphabeten zusammengesetzten Abkürzung als Standardwortkandidaten bestimmt.
  • Zeile 70: Mit dem regulären Ausdruck '(NNP/|NNG/)+(XSN/)*|(XPN/)+(NNP/|NNG/)+(XSN/)*|(SL/) +' findet die Muster.
    • Dieses Muster findet eines von drei Dingen:
      • (NNP/|NNG/)+(XSN/)*: (Eigenname oder Gattungsname) 1 oder mehr + 0 oder mehr von Substantiven abgeleitete Suffixe
      • (XPN/)+(NNP/|NNG/)+(XSN/)*: 1 oder mehr Präfixe + 1 oder mehr (Eigen- oder gebräuchliche Substantive) + 0 oder mehr von Substantiven abgeleitete Suffixe
      • (SL/)+: 1 oder mehr Fremdsprachen
  • Zeilen 71~84: Verbinden Sie die gefundenen Wörter mit dem obigen regulären Ausdrucksmuster und fügen Sie sie der extrahierten Wortliste hinzu, indem Sie das Suffix „[compound word]“ anhängen. Später, wenn wir an der Verfeinerung des Standardwörterbuchs arbeiten, fügen wir absichtlich Suffixe hinzu, um Wörter zu identifizieren, die als zusammengesetzte Wörter extrahiert wurden.
  • Zeilen 86 bis 110: Die extrahierten Wörter werden dem DataFrame hinzugefügt, indem zusätzliche Attribute wie Quelle und Dateiformat hinzugefügt werden.
  • Zeile 122: Gibt ein df_result zurück, das eine Liste extrahierter Wörter enthält. 

Wenn Sie als Referenz zusätzlich ein weiteres Wortartmuster extrahieren möchten, können Sie die Zeilen 65 und 70 ändern.

4.5. make_word_cloud-Funktion

def make_word_cloud(df_group, now_dt, out_path):
    """
    명사의 빈도를 구한 DataFrame으로 word cloud 그리기
    :param df_group: 명사 빈도 DataFrame
    :param now_dt: 현재 날짜 시각
    :param out_path: 출력경로
    :return: None
    """
    start_time = time.time()
    print('\r\nstart make_word_cloud...')
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    # malgun.ttf # NanumSquare.ttf # NanumSquareR.ttf NanumMyeongjo.ttf # NanumBarunpenR.ttf # NanumBarunGothic.ttf
    wc = WordCloud(font_path='.\\font\\NanumBarunGothic.ttf',
                   background_color='white',
                   max_words=500,
                   width=1800,
                   height=1000
                   )

    # print(df_group.head(10))
    words = df_group.to_dict()['Freq']
    # print(words)
    # words = df_group.T.to_dict('list')
    wc.generate_from_frequencies(words)
    wc.to_file('%s\\wordcloud_%s.png' % (out_path, now_dt))
    # plt.axis('off')
    end_time = time.time()
    # elapsed_time = end_time - start_time
    elapsed_time = str(datetime.timedelta(seconds=end_time - start_time))
    print('make_word_cloud elapsed time: %s' % elapsed_time)

Diese Funktion verwendet das WordCloud-Paket.

WordCloud 예시
WordCloud-Beispiel
  • Zeilen 258-263: Erstellen Sie ein WordCloud-Objekt.
    • Die Schriftartdatei NanumBarunGothic.ttf (NanumBarunGothic) im Schriftartordner wurde verwendet. Um zu einer anderen Schriftart zu wechseln, kopieren Sie die Schriftartdatei in den Schriftartenordner und geben Sie den Dateinamen an.
    • Sie können background_color, max_words, width und height auf die gewünschten Werte ändern.
  • Zeile 266: Erstellen Sie in DataFrame df_group Wörterbuchwörter, die aus Index (Wort) als Schlüssel und „Freq“ (Frequenz) als Wert bestehen.
  • Zeile 269: Erstellen Sie ein WordCloud-Bild aus Wörtern, die Häufigkeiten enthalten.
  • Zeile 270: Speichern Sie das erstellte WordCloud-Bild.

Bis hierhin ist die Erläuterung des Quellcodes abgeschlossen. Als Nächstes sehen wir uns zusätzliche Erklärungen für den Quellcode und den Inhalt in Bezug auf die Wortartkennzeichnung an.


<< Liste verwandter Artikel >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch