2024年7月27日 星期六

Brainstorming ブレインストーミング 「優化」與「增加提供靈感」關鍵字查詢參考資訊

情境:有時告訴AI🤖輸入關鍵字不夠具體或想更精進多些靈感來源,可能會對查詢結果感到不滿意,可藉由AI神器幫忙,將它優化後取得更多靈感後,再以補提追問方式,修正您的詢問關鍵字後再次詢問,以便讓它協助您取得更精準及詳盡資訊😃

💜步驟一: 將下面藍色PROMPT提示詞下方,先將您的 詢問初稿關鍵詞(即 Retrieval of information),以前例Brainstorming發想為案例

💜步驟二: AI神器可依您提供的提示詞或關鍵詞,給予您更多的靈感來源(如:畫風的提示詞靈感(萌え系、ゆるキャラなど))。

💜步驟三:將步驟二之查詢到之新增靈感關鍵詞,再修正或追加您的提示詞詢問細項目重新向AI提問,以便獲取到 更貼近您的查詢需求

 

相關資訊:

請AI🤖協助優化PROMPT提示詞工具

YT影音平台AI查詢  



You are a master of data retrieval and a creative prompt engineer!  

I need your help discovering inspiring prompts for finding {{Retrieval of information}}.
My goal is to uncover new **techniques**, **strategies**, and **real-world examples** to optimize my data search process.

Please present your recommendations in a table format using Markdown.  
Each suggestion should include:

| Prompt | Target Resource (e.g., SNS,blog, forum, database,Research Papers) | Explanation |  Potential Parameters to Adjust (if applicable) |
|---|---|---|---|

| "Effective keyword research techniques for data discovery" | Data Science Blogs, Information Retrieval Forums |
This prompt targets resources that explain how to find the right keywords when searching for data. |
Relevance weighting towards "techniques," "keyword research" , Relevance to "time series analysis," "anomaly detection," and potentially filter by publication date for recent advancements.  |
| ... | ... | ... | ... |

"""
Retrieval of information:

あなたはイラストレーターの巨匠だ。
{{キーワード}}: [入力された文字列]
スタイル: SDキャラ風、デフォルメ、シンプルで明るい、覚えやすい
説明: 上記の{{キーワード}}を元に、記憶に残るようなデフォルメされたイラスト・挿絵を作成してください。大きな目と頭、小さな体で表現してください。
具体的なイラス(アイデア案)をブレインストーミングしてください


"""

2024年7月25日 星期四

Brainstorming ブレインストーミング 「文字」圖像化發想

情境:因文字面可能生硬,不一定明確清晰具體化?藉由AI🤖擬人化之輔助,將⌈TEXT文字⌋予以IMAGE圖像化呈現😃

💜說明一:使用方式,請將最下方PROMPT提示詞樣版文字,複製並貼到AI神器協助發想。

💜說明二:
將您欲查詢之關鍵字或活動主旨,在"""      """(三重引用符號)所標示區內進行替換,即可⌈文字⌋具體圖像化

💜說明三之一:(查詢方法一) 將查詢的關鍵字,至Google圖片分類去找尋 

                    発足  「 デフォルメ化」 イラスト素材


💜說明三之二:(本例使用)根據上面AI神器協助發想後,生成文字描述(找尋您認為適合記憶情境之圖像文字描述 🚩勢いよく飛び出すイメージ,將平面之單字擬人化活起來)

(另外,可將AI提供之圖像文字描述資訊,找尋支援 DALL-E演算法之AI工具(如:Microsoft Copilot)生成圖片)

💜說明三之三: 取得圖像文字描述補提追問參考資訊
今回の{{キーワード}}をテーマにしたSDキャラクターイラスト・挿絵のアイデアを、箇条書きで解説します。


相關查詢:

藉由AI神器,做日文⌈Kanji漢字讀音⌋解析

更進階方法(日文版)creative prompts and co-creative methodologies

🚨注意事項:(AI神器善意提醒)
插畫查詢資訊,供發想參考,如直接將網路查詢插圖做活動文宣用途、商用等,可能涉及著作權、肖像權等法律面等議題,請多加留意。(実際にイラストを作成する際には、著作権や肖像権など、法的にも問題がないように注意が必要です。)

あなたはイラストレーターの巨匠だ。
{{キーワード}}: [入力された文字列]
スタイル: SDキャラ風、デフォルメ、シンプルで明るい、覚えやすい
説明: 上記の{{キーワード}}を元に、記憶に残るようなデフォルメされたイラスト・挿絵を作成してください。大きな目と頭、小さな体で表現してください。

具体的なイラス(アイデア案)をブレインストーミングしてください


"""

キーワード:発足

"""


2024年7月21日 星期日

善用AI神器工具,讓它成為您 工作上之輔佐幫手

情境:工作上需要可能於網路找尋一些解決問題所需使用的線索(如:部署ISO映像檔相關教學) 或 想再更深入瞭解資訊,有時透過搜尋引擎找到的資訊,或許只取得 廣度維度之資訊,但深度資訊需求廣度資訊逐一耗時篩選,因此可透過AI神器,加速取得更貼近主題之資訊。

💜步驟一:角色扮演(role-playing),
詳細告訴AI想要請它幫什麼忙?(例如:您想要製做出 微軟程式之部署派送程式,您就需請AI擔任  佈署程式之工程師,以利它Step-By-Step手把手教您 )

💜步驟二:依您所需要的情境之依據,下提示詞

你是微軟資深程式佈署工程師,
因為有部署客製化需求 (繞過硬體驗證與微軟帳號登入,移除內建軟體,客製 Windows ISO映像檔),
參照使用 github專案 cschneegans/unattend-generator,建立autounattend.xml 回應檔案
(包含 Region and language settings、Processor architecture、Computer name、Partitioning and formatting、Windows Product Key、User accounts、Virtual machine support、Remove bloatwareWindows 、Defender Application Control),做客製化 Windows ISO映像檔,以利部署派送;
過程中可能需透過工具,如:anyburn ,搭配官方ISO檔案,製作客製化ISO映像檔,
Provide clear and concise instructions.
Additionally, please recommend relevant YouTube video tutorials in English, Chinese, or Japanese demonstrating the entire process.

💜步驟三:有時自己的構想,可能較粗糙沒有經過大數據分析處理後來的優質,因此可藉由AI神器進行優化調校處理 (依個案情境,修正優化樣版PROMPT提示詞,如:母語native language:english,因為該領域中微軟公司屬英文語系),獲取更多之靈感或應注意卻未留意到之觀點。
☺💟domain themes:プロンプトのベストプラクティス
☺💟native language:english
☺💟Points to note:focus on Windows Disc Image (ISO File)の性能を最大限に引き出すためには、調整パラメータを適切に設定する & ベストプラクティス
 

💜步驟四: (將此步驟,獲取之關鍵資訊,反饋更新至步驟三 做適當PROMPT修正)
將步驟三 完成優化後之PROMPT提示詞,可輔佐您 協尋與主題更貼近之相關資訊😀

 

後記:

💛步驟三之處理,會隨著您使用不同的演算法Model強度及所下的temperature溫度參數,產出結果也會有所不同,僅供參考。

💛Windows Answer File Generator回應檔案參考資訊

https://www.windowsafg.com/win10x86_x64.html
https://github.com/SvenGroot/GenerateAnswerFile
https://schneegans.de/windows/unattend-generator/

💛建立 autounattend.xml 回應檔案時,需注意各設定的正確性,以免造成部署失敗。
需選擇正確的 ISO 檔案版本和架構;需注意電腦的硬體相容性。
可能會導致一些問題,例如:
無法使用 Windows 更新?
無法使用某些 Windows 功能、
無法獲得微軟官方支援?
因此,在部署客製化 Windows ISO 映像檔之前,建議進行充分的測試與評估。

2024年7月7日 星期日

藉由AI神器協助撰寫WSF腳本程式,按右鍵一鍵完成資料備份

情境:因為常有不同版次資料(或資料夾)需做備份💾,藉由AI神器協助撰寫一個備份程式,只要按滑鼠右鍵,一鍵完成資料備份至D:\Backup資料夾中。


Prompt提示詞下法如下:常需要保留每次不同版本資料,請寫成Windows Script Files腳本文檔,做備份處理 ,請以argc argv 方式讀取備份來源,備至d:\backup ,依來源檔案名稱做為備份目錄名稱,避免重覆(單一檔名重覆,加入流水號)且分類方便, 另外新增備份來源如為整個目錄,同樣也是備份至d:\backup 但目的資料夾,應同來源資料夾,如遇目的資料夾重覆,同樣加入流水號

 

說明:

💜將下面紫色腳本程式另存成Fbackup.WSF附加檔案類型,並且放置於  shell:sendto (Win+R | 鍵入 shell:sendto |Fbackup.wsf貼於此資料夾),不論是資料夾或者是檔案,按下滑鼠右鍵,選擇Fbackup.wsf 即可自動將您的資料備份至 D:\Backup 資料夾,🚨請記備定期將D:\Backup 另外離線備份至USB行動碟,防止勒索病毒加密 本地端電腦。

💜Argc Argv參數是省去輸入檔案最佳作法,直接將您所欲備份之檔名或資料夾名稱 自動讀入

💜系統第1次執行,可能會詢問您要用何程式開啟WSF檔,請用預設Windows VBscript執行即可。

💜參考上面Prompt提示詞,將它貼至AI神器,即可幫您生成備份程式,如您覺得太陽春,可以自行補提其它需求(:請再預先做壓縮處理後,再將該檔案進行備份)


相關查詢:
バックアップ  世代

 

Prompt提示詞活用案例:

簡化HTML樣式(Doc_2_HTML)

png、jpeg圖檔縮小活用案例


 <?xml version="1.0"?>

<job id="BackupJob">

  <script language="VBScript">

    <![CDATA[

    Option Explicit

    Dim objFSO, objArgs, strSource, strBackupRoot, strBackupDir, strDest, intCounter

 

    ' 初始化

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set objArgs = WScript.Arguments

    strBackupRoot = "d:\backup"

 

    ' 檢查備份傳遞參數

    If objArgs.Count = 0 Then

        WScript.Echo "請提供您要備份的檔案或資料夾之路徑。"

        WScript.Quit

    End If

 

    ' 處理每個參數

    For Each strSource In objArgs

        strBackupDir = strBackupRoot & "\" & objFSO.GetBaseName(strSource)

 

        ' 檢查目的資料夾是否已存在

        intCounter = 1

        Do While objFSO.FolderExists(strBackupDir & "_" & intCounter)

            intCounter = intCounter + 1

        Loop

        strBackupDir = strBackupDir & "_" & intCounter

 

        ' 創建目的資料夾(如果不存在)

        If Not objFSO.FolderExists(strBackupDir) Then

            objFSO.CreateFolder strBackupDir

        End If

 

        ' 備份檔案或資料夾

        If objFSO.FileExists(strSource) Then

            ' 修正 strDest 以包含完整路徑

            strDest = strBackupDir & "\" & objFSO.GetFileName(strSource)

            objFSO.CopyFile strSource, strDest

            WScript.Echo "檔案已備份至: " & strDest

        ElseIf objFSO.FolderExists(strSource) Then

            objFSO.CopyFolder strSource, strBackupDir

            WScript.Echo "資料夾已備份至: " & strBackupDir

        Else

            WScript.Echo "指定的檔案或資料夾不存在: " & strSource

        End If

    Next

    ]]>

  </script>

</job>

2024年7月5日 星期五

活用 Win視窗鍵+V ,選擇性貼上之功能視窗(記憶體內存剪貼簿)


情境:
因為不定時處理常態性之編輯事務時,每次都要鍵入 關鍵字1 的字詞,
處理過程中,常會需要鍵入  關鍵字2 ,
處理完成後,又需另外鍵入  關鍵字3

為了解決此種⌈複製/貼上⌋瑣碎編輯問題 ,可先將下面PYTHON程式,預先編譯成EXE執行檔,並寫成BAT批次檔,每當執行特定工作任務前,就執行BAT檔或執行檔,預先將 關鍵字1 關鍵字2 關鍵字3 全部1次性,分批載入記憶體內,
需要使用時 只需要使用⌈ Win視窗鍵+V⌋ ,即可叫出 選擇性貼上之功能視窗(記憶體內存剪貼簿) ,點選所欲使用的那3個關鍵字詞,可以節省每次都要打字之時間 或複製/貼上處理時間😀。

相關好用快速鍵:

Win視窗鍵 + .  (叫出 符號表 / Emoji表情小貼圖😊)


import pyperclip
import time

keywords = [
"關鍵字1", "關鍵字2", "關鍵字3"]

for keyword in keywords:
    pyperclip.copy(keyword)
    print(f"已將 '{keyword}' 複製到剪貼簿,您可用Win+V 叫出後,選擇性貼上")
    time.sleep(0.5)  # 停留 0.5 秒 (500 毫秒)

 

2024年6月30日 星期日

一鍵完成圖檔OCR辦識,免除打字處理

情境:YOUTUBE上有許多優秀的日文老師的提供考題解析或文法解析,不過有時仍想再藉助AI神器分析解題或文法,只是部分YT,並未提供SRT字幕SubRip subtitle file,可以免去打字處理,此時就需透過手動截圖方式(PNG、JPEG),貼到小畫家後,另存成圖檔,再轉交由OCR辨識軟體將日文辨識出來,進行解題,過程有些繁瑣。

解決辦法:
透過PYTHON程式,將下面程式另存成png2txt.jp編譯成png2txt.EXE執行檔後,直接於截圖後,使用下面之步驟二方式,一鍵完成日文OCR辨識處理。
由系統快取資訊,取得剛才截圖資訊,直接提供給OCR辨識軟體(Tesseract )轉換成純文字,最後將它交給AI神器進行解題即可 (無需另外開啟小畫家,存檔覆寫等處理)


💜操作步驟一(截圖處理): Shift + Win + S 快速鍵,區塊截取圖片轉換為日文TXT純文字,ScreenShot圖檔即可用PYTHON程式直接取用 CACHE記憶體內之截圖資訊
💜步驟二:點選執行,預先編譯好之png2txt.EXE執行檔,即可一鍵完成日文OCR辦識處理。
💜步驟三:複製剛辨識完成之TXT檔,貼至AI神器💯上去詢問日文考題解析或文法解析。


相關資源:
YOUTUBE字幕下載
OCR辨識軟體🔣(圖檔轉文字jpg2txt)Tesseract
🏯AI神器解析日文考題或句子結構

Mac 上的 Shift + Command + 4 組合鍵,類似 Windows 上的 Win + Shift + S,可方便地選擇性截取螢幕的一部分。


# -*- coding: utf-8 -*-
'''
python取圖檔,辨識日文考題
'''
import os
import subprocess
import sys
from PIL import Image, ImageGrab
import pytesseract

def save_clipboard_image(filename='screenshot.png'):
    try:
        # 獲取剪貼簿中的圖像
        image = ImageGrab.grabclipboard()

        if image is None:
            print("剪貼簿中沒有圖像資料")
            return

        # 保存圖像為PNG格式,覆蓋同名文件
        image.save(filename, 'PNG')
        print(f"圖像已保存為 {filename}")

    except Exception as e:
        print(f"無法保存圖像: {e}", file=sys.stderr)

def ocr_image_to_text(image_path):
    # 檢查檔案是否存在
    if not os.path.exists(image_path):
        print(f"Error: File not found - {image_path}")
        return

    # 修改為您的 Tesseract 安裝路徑
    pytesseract.pytesseract.tesseract_cmd = 'd:/Program Files/Tesseract-OCR/tesseract.exe'

    img = Image.open(image_path)
    text = pytesseract.image_to_string(img, lang='jpn')  # 辨識日文考題

    # 輸出檔案名稱根據輸入檔案修改
    output_file = os.path.splitext(image_path)[0] + '.txt'
    with open(output_file, mode='w', encoding='UTF-8') as f:
        f.write(text)

    print(f"OCR結果已保存為 {output_file}")
    subprocess.Popen(['explorer', output_file])  # 使用 list 形式傳遞參數

if __name__ == "__main__":
    image_filename = 'D:\Program Files\Tesseract-OCR\screenshot.png'
   
save_clipboard_image(image_filename)
    ocr_image_to_text(image_filename)

 

 ###################################################

#以下為進階python版本之 一鍵完成圖檔OCR辨識: (直接將prompt日文提示詞,併入掃描ocr辨識結果,結合起來後,直接自動化用檔案總管開啟 d:\testjlpt.txt')

# input_file1內容,如下:

あなたは日本語のプロで、国語の問題を解きの達人です。

{{問題文}}は1~4の中から最も適切なものを一つ選んでください。

(中略)

"""
問題文:

 

# input_file2內容為     """  
#為何要另外加入
input_file2.txt ,是為了將 4選1選項問答PROMPT提問文:  +OCR辨識之TXT結果後,再補上 """ (三重引用符號),讓AI能夠將它視為整段完整之PROMPT提問文  (亦即,前段日文詢問之PROMPT + OCR辨識後之TXT +最後再補上  三重引用符號)

# output_file內容為  d:\testjlpt.txt'   

 

import os
import subprocess
from PIL import Image, ImageGrab
import pytesseract

def save_clipboard_image(filename='screenshot.png'):
    """保存剪貼簿中的圖像。"""
    image = ImageGrab.grabclipboard()
    if image:
        image.save(filename, 'PNG')
        print(f"圖像已保存為 {filename}")
        return filename
    else:
        print("剪貼簿中沒有圖像資料")
        return None


def ocr_image_to_text(image_path, lang='jpn'):
    """使用 Tesseract OCR 對圖像進行文字辨識。"""
    if not os.path.exists(image_path):
        print(f"Error: File not found - {image_path}")
        return None

    pytesseract.pytesseract.tesseract_cmd = r'D:/Program Files/Tesseract-OCR/tesseract.exe'
    return pytesseract.image_to_string(Image.open(image_path), lang=lang)


def append_file_content_in_order(input_file1, input_file2, content_to_append, output_file):
    """將指定內容和兩個檔案的內容按照指定順序追加到檔案末尾。"""
    try:
        with open(output_file, 'w', encoding='utf-8') as f_out, \
                open(input_file1, 'r', encoding='utf-8') as f_in1, \
                open(input_file2, 'r', encoding='utf-8') as f_in2:

            f_out.write(f_in1.read())  # 先
入 input_file1 内容 (00)
            f_out.write("\n\n" + content_to_append)  # 再
入 OCR 
            f_out.write("\n\n" + f_in2.read())  # 最后
入 input_file2 内容 (01)

        print(f"已成功將結果寫入 {output_file}")

    except FileNotFoundError as e:
        print(f"Error: 檔案不存在 - {e.filename}")
    except Exception as e:
        print(f"Error: 發生錯誤 - {e}")


if __name__ == "__main__":
    image_filename = r'D:\Program Files\Tesseract-OCR\screenshot.png'
    input_file1 = r'd:\testjlpt00.txt'
    input_file2 = r'd:\testjlpt01.txt'
    output_file = r'd:\testjlpt.txt'

    saved_image_path = save_clipboard_image(image_filename)
    if saved_image_path:
        ocr_text = ocr_image_to_text(saved_image_path)

        if ocr_text:
            append_file_content_in_order(input_file1, input_file2, ocr_text, output_file)

            print(f"OCR結果已保存為 {output_file}")
            subprocess.Popen(['explorer', output_file])
 

2024年6月27日 星期四

藉由AI神器,協助將WORD排版好轉出HTML格式,簡潔化處理 Docx_2_HTML

情境:工作需要為維持靜態網頁程式版面,預先以WORD編輯好版面,但另存成HMTL檔案,再貼到網站原始碼處。
但微軟WORD檔,另存成HTML時,常會殘留非必要之多餘資訊(如:CLASS、Meta),可經由PYTHON程式,將它部分簡潔化處理。

💙使用步驟一:將WORD文件,預先簡單排版,並另存新檔,下拉存檔類型(T):  已篩選的網頁(*.htm;*.html)
💙步驟二:將下面PYTHON程式,另存成Doc_2_HTML.py (前提:已預先安裝好PYTHON執行環境)
💙步驟三:將步驟一之HTML檔案,Drag-and-drop拖曳至Doc_2_HTML.py ,即可完成轉換產出處理。


PROMPT提示詞,產製PYTHON操作,如下:

你現在是資深網頁排版人員及PYTHON資深工程師,目前有一個微軟DOC檔,另存成HTML格式,
因為網頁程式無需WORD提供多餘內容(如:註解、Class屬性、span標籤等),請協助予以簡潔化處理後,產製PYTHON程式,
來源讀取以ARGC、ARGV方式進行,輸出檔名以輸入來源加入_OUT,如遇重覆再加入流水號。


💜可將此PYTHON程式,上傳給AI神器,並告訴AI程式您的新需求 (如:可將 font-family:標楷體  透過DIV之標籤,置於上方外框架處,並請重新產製完整PYTHON程式,將版面更精簡,如:wrap_with_div(soup)程式區塊),請它再重新產製完整PYTHON程式即可

💜PROMPT提示詞追補(請AI神器將本PYTHON程式,以Class類別方式改寫,並提供完整PYTHON程式及類別之方法詳細解說)。

import re
import os
import sys
import time
import chardet
from bs4 import BeautifulSoup, Comment ,Tag
import logging
import argparse

def detect_encoding(file_path):
    """
    使用 chardet 庫檢測文件編碼
    """
    with open(file_path, 'rb') as f:
        raw_data = f.read()
        result = chardet.detect(raw_data)
        return result['encoding']

def remove_comments(soup):
    """
    移除所有註解
    """
    for comment in soup.find_all(string=lambda text: isinstance(text, Comment)):
        comment.extract()

def remove_classes(soup):

    """
    移除所有 class 屬性
    """

    for tag in soup.find_all(class_=True):
        del tag['class']

def remove_word_meta_tags(soup):

    """
    移除 meta 標籤中生成器訊息
 
   """

    for meta_tag in soup.find_all('meta', {'name': 'Generator', 'content': re.compile(r'Microsoft Word')}):
        meta_tag.extract()

def remove_spans(soup):

    """
    移除所有 span 標籤
    """

    for span_tag in soup.find_all('span'):
        span_tag.unwrap()

def unwrap_anchor_tags(soup):

    """
    移除所有非 href 錨點標籤,但保留其中的内容
    """

    for a_tag in soup.find_all('a', href=False):
        a_tag.unwrap()

def remove_styles(soup):

    """
    移除所有 style 屬性
    """

    for tag in soup.find_all(style=True):
        del tag['style']

def clean_style_tags(soup):

    """
    移除所有含有 @font-face 和 @page 的註解,以及 Word 残留样式定义
    """

    for style_tag in soup.find_all('style'):
        if style_tag.string:
            style_content = style_tag.string
            style_content = re.sub(r'@font-face\s*\{[^}]*\}', '', style_content, flags=re.DOTALL)
            style_content = re.sub(r'@page\s*[^}]*\}', '', style_content, flags=re.DOTALL)
            style_content = re.sub(r'\/\*[^*]*\*+([^/*][^*]*\*+)*\/', '', style_content, flags=re.DOTALL)
            style_content = re.sub(r'<!--[^>]*-->', '', style_content, flags=re.DOTALL)
            style_content = re.sub(r'\s*\{[^}]*\}', '', style_content, flags=re.DOTALL) # Remove all remaining style definitions
            if not style_content.strip():
                style_tag.extract()
            else:
                style_tag.string.replace_with(style_content)

def remove_empty_paragraphs(soup):

    """
    移除所有空的 p 標籤,只有內容为空或只包含空格的情况才移除
    """

    for p_tag in soup.find_all('p'):
        if not p_tag.text.strip():
            p_tag.extract()


def process_tables(soup):

    """
    處理表格,生成 summary 屬性並設置 scope 屬性
    """

    for table in soup.find_all('table'):
        # 檢查表格是否有標題列 (<th>)
        has_header_row = any(tr.find('th') for tr in table.find_all('tr'))

        if has_header_row:
            # 如果有標題列,則使用標題列內容作為列名
            headers = table.find_all('th')
            column_names = [header.get_text(strip=True) for header in headers]
        else:
            # 如果沒有標題列,則使用第一列數據作為列名
            first_row = table.find('tr')
            if first_row:
                column_names = [cell.get_text(strip=True) for cell in first_row.find_all(['th', 'td'])]
            else:
                # 如果表格為空,則設置列名為空列表
                column_names = []

        # 嘗試從前面的段落中獲取表格用途,並檢查其中是否包含 <b> 標籤
        previous_element = table.find_previous('p')
        if previous_element and previous_element.find('b'):
            table_purpose = previous_element.b.get_text(strip=True)  # 直接從 <b> 中提取文字
        else:
            # 如果沒有找到前面的段落或標題,使用表格的所有列名作為 table_purpose
            table_purpose = "、".join(column_names) if column_names else "未知表格用途"

        # 確保 column_names 包含有效的名稱,否則設置為 "未知"
        column_names = [name if name else "未知" for name in column_names]

        # 生成 summary 屬性文字,確保列數訊息正確
        num_columns = len(column_names)
        column_info = "、".join([f"第{i+1}直欄為{column_names[i]}" for i in range(num_columns)]) if num_columns > 0 else "無直欄位"
        summary_text = f"{table_purpose},{column_info}。"

        # 更新表格的 summary 屬性
        table['summary'] = summary_text

        # 設置 th 和 td 的 scope 屬性 (僅在有標題列時)
        if has_header_row:
            for th in headers:
                th['scope'] = 'col'

            for tr in table.find_all('tr'):
                if tr.find('th'):
                    continue  # 跳過表格標題行
                for td in tr.find_all('td'):
                    td['scope'] = 'row'

        # Debugging output to check the generated summary text
        print("Generated summary text:", summary_text)
        



def wrap_with_div(soup):

    """用 <div> 標籤包裹整個文檔内容,並設置標楷體字體樣式"""
    # 如果没有 html 標籤,則創建
    if not soup.html:
        new_html = soup.new_tag('html')
        soup.append(new_html)

    # 如果没有 body 標籤,則創建
    if not soup.body:
        soup.html.append(soup.new_tag('body'))

    # 創建外部 div
    outer_div = soup.new_tag("div", style="font-size:100%;font-family:'標楷體';")

    # 將body 中的所有内容移動到外部 div
    for child in soup.body.contents:
        if isinstance(child, Tag):
            outer_div.append(child.extract())

    # 創建内部 div
    inner_div = soup.new_tag("div")
    inner_div.append(outer_div)

    # 將内部 div 添加到 body
    soup.body.append(inner_div)



def optimize_html_content(html_content, input_file):

    """
    最佳化 HTML 內容,移除多餘資訊,並以輸入檔名加上 "_out" 命名輸出。
    """

    try:
        soup = BeautifulSoup(html_content, 'html.parser')

        remove_comments(soup)
        remove_classes(soup)
        remove_word_meta_tags(soup)
        remove_spans(soup)
        unwrap_anchor_tags(soup)
        remove_styles(soup)
        clean_style_tags(soup)
        remove_empty_paragraphs(soup)
        process_tables(soup)
        wrap_with_div(soup)


        # 以輸入檔名加上 "_out" 命名輸出檔案,處理重複情況(加入流水號)
        base_filename, ext = os.path.splitext(input_file)
        filename = f"{base_filename}_out{ext}"
        counter = 1

        while os.path.exists(filename):
            filename = f"{base_filename}_out_{counter}{ext}"
            counter += 1


        # 寫入修改後的 HTML 內容,使用 'utf-8' 編碼
        with open(filename, 'w', encoding='utf-8') as file:
            file.write(str(soup))

        # 列印儲存的檔案名稱
        print(f"已儲存最佳化後的 HTML 檔案:{filename}")

    except Exception as e:
        # 列印錯誤訊息
        logging.error(f"發生錯誤:{e}", exc_info=True)
        # 等待5秒鐘以便使用者查看錯誤訊息
        time.sleep(5)


def main():
    parser = argparse.ArgumentParser(description='優化HTML文件内容')
    parser.add_argument('filename', help='輸入的HTML文件名')
    args = parser.parse_args()

    input_file = args.filename
    try:
        # 使用 chardet 庫檢測文件編碼
        detected_encoding = detect_encoding(input_file)

        # 使用正確的編碼讀取文件
        with open(input_file, 'r', encoding=detected_encoding) as file:
            html_content = file.read()

        optimize_html_content(html_content, input_file)

    except FileNotFoundError:
        logging.error(f"找不到檔案: {input_file}")
        time.sleep(5)
    except Exception as e:
        logging.error(f"發生錯誤:{e}", exc_info=True)
        time.sleep(5)

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    main()

 


相關查詢:

Removes unnecessary HTML tags from Word documents and outputs clean HTML.
Word文書から生成されるHTMLの不要な情報を取り除いて、きれいなHTMLを出力します。