情境:
因為不定時處理常態性之編輯事務時,每次都要鍵入 關鍵字1 的字詞,
處理過程中,常會需要鍵入 關鍵字2 ,
處理完成後,又需另外鍵入 關鍵字3
為了解決此種⌈複製/貼上⌋瑣碎編輯問題 ,可先將下面PYTHON程式,預先編譯成EXE執行檔,並寫成BAT批次檔,每當執行特定工作任務前,就執行BAT檔或執行檔,預先將 關鍵字1 關鍵字2 關鍵字3 全部1次性,分批載入記憶體內,
需要使用時 只需要使用⌈ Win視窗鍵+V⌋ ,即可叫出 選擇性貼上之功能視窗(記憶體內存剪貼簿) ,點選所欲使用的那3個關鍵字詞,可以節省每次都要打字之時間 或複製/貼上處理時間😀。
相關好用快速鍵:
2024年7月5日 星期五
活用 Win視窗鍵+V ,選擇性貼上之功能視窗(記憶體內存剪貼簿)
import pyperclip
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を出力します。
藉由AI神器,生成Offline image downsizing utilities
情境:因同事經常上傳大圖檔,易造成網路壅塞瓶頸,因此請AI神器,生成離線圖檔縮小工具程式
💜處理及使用
可透過auto-py-to-exe 轉換PY程式(將下面紫色部分,用記事本複製貼上,另存成*.py檔),編譯成 EXE執行檔,
💜同仁將超大圖檔Drag-and-drop拖曳(自動讀取檔案來源將路徑傳入Argc 、Argv參數,)至 轉換好之EXE檔上面 ,即可進行圖檔縮小轉換處理。
相關程式: Image-upscaling影像圖檔模糊怎麼辦?
PROMPT提示詞下法,如下:
請寫一個PYTHON程式,
來源檔為jpg,png圖檔,影像予以縮小? max_size=(1920, 1080) ,
如來源影像大小,低於500k以下者,就不做處理,
輸入方式以argc argv方式讀取檔案
輸出檔名,與輸入檔名相同,另再加入_C
import os
import argparse
from PIL import Image
def resize_image(file_path, output_path, max_size=(1920, 1080)):
with Image.open(file_path) as img:
img.thumbnail(max_size, Image.Resampling.LANCZOS)
img.save(output_path)
def main():
parser = argparse.ArgumentParser(description='Resize images if they exceed 1MB.')
parser.add_argument('images', metavar='N', type=str, nargs='+', help='List of image files to be processed')
args = parser.parse_args()
for img_file in args.images:
if os.path.getsize(img_file) > 500 * 1024: # Check if file size is greater than 500k
file_root, file_ext = os.path.splitext(img_file)
output_file = f"{file_root}_C{file_ext}"
resize_image(img_file, output_file)
print(f"Resized image saved as {output_file}")
else:
print(f"Image {img_file} does not exceed 500k, no resizing needed.")
if __name__ == '__main__':
main()
2024年6月22日 星期六
藉由AI神器,做日文⌈Kanji漢字讀音⌋解析
說明一:使用方式,請將下列PROMPT提示詞模版資訊,複製並貼到AI神器去查詢。
說明二:
⌈漢語字詞⌋:想知道漢字表現之關鍵字,只要將您欲查詢之關鍵字,在"""
""",(三重引用符號)所標示區,進行內容替換更新,即可查詢其它字詞之讀音。
說明三:囿於AI回應字數長度限制,如有覺得停頓住、未完全呈現完整資訊,可再下 つづき 提示詞;補提追問2音(今回の「かんじん」と「かんしん」の発音、迷いませんか? どちらが正解なのか、具体的な区別方法・音韻関係・アクセントの位置・言葉の意味と音の響きとの関連性を詳しく解説お願いします。);補提追問濁音"原因 ,輔助記憶(今回の読み方が濁音・促音音変になるのはなぜですか?音韻体系と漢字の訓読みの歴史との関係について詳しく教えてください。),請AI繼續產出未完成部分或 賡續提問😊
相關查詢:
藉由AI神器💯,來學習日本語 彙整索引資訊
日文字詞讀音查詢(Pronunciation search for Japanese words)
數字雙關語 諧音背誦秘技(数字語呂合わせ対応一覧表)
{{漢字字詞}}の読み方を覚えやすくするために、言葉の意味やイメージ・字形分析・似た音の言葉との関連付け・熟語での学習・対義語・漢字の構成要素・音韻変化・促す良い例などを挙げます。
漢字字詞:肝心
"""
2024年6月1日 星期六
藉由AI神器協助查詢日本外來語Gairaigo
情境:因為日文句中,常有融入來自國外的語詞(カタカナ形式呈現),藉由AI神器協助查詢日本 外來語Gairaigo(亦可當成⌈英和辞典⌋,鍵入⌈英文⌋單字),對它進行字根字首字尾解析,輔助語文學習。
說明一:使用方式,請將下列PROMPT提示詞模版資訊,複製並貼到AI神器去查詢。
說明二:將您欲查詢之外来語關鍵字,在""" """,(三重引用符號)所標示區,內容更新即可查詢。
相關查詢:
藉由AI神器💯,來學習日本語 彙整索引資訊
2024年5月26日 星期日
藉由AI神器協助,輔助學習⌈他動詞(transitive)⌋ or ⌈自動詞( intransitive)⌋
情境:為了增進對自動詞、他動詞的瞭解與學習,藉由AI神器協助將 日語文法 相關連性之資訊找出來,並提供相關影音資訊。
說明一:使用方式,請將下列PROMPT提示詞模版資訊,複製並貼到AI神器去查詢。
說明二:提示動詞:將自己想知道的他下一、他上一、他五等他動詞,只要將要查詢之關鍵字,可找出對應之自動詞,反之則亦然(自下一、自上一、自五等自動詞),在""" """(三重引用符號)所標示區,內容更新即可查詢。
說明三:囿於AI回應字數長度限制,如有覺得停頓住、未完全呈現結果,可再下 続き 提示,請AI繼續產出未完成部分(如:影片資訊,可再依其產出「線索資訊」接續去查,或沒出現YT影音資訊。
☺💜補提追問PROMPT提示詞 1 : (將下面淺紫色部分提示詞,複製/貼上,再次向AI神器詢問)
さらに、日本語の自動詞と他動詞学習に焦点を当てたおすすめのYouTube動画があれば教えてください。
☺💜補提追問PROMPT提示詞 2 :
今回の提示動詞変化も図表形式を挙げて(未然・連用・終止形・連体形・仮定形・命令・て形)
相關查詢:
藉由AI神器💯,來學習日本語 彙整索引資訊
**{{提示動詞}}**を使って、自動詞と他動詞の見分け方を詳しく説明してください。
{{提示動詞}} は、自動詞としても他動詞としても使用されます。
自発的な動作: {{提示動詞}} は、主語の意志や意図に関わらず、自然に起こる動作を表します。
目的語の有無: 自動詞として用いられる場合、目的語をとりません。
意図性: {{提示動詞}} が自動詞として用いられる場合、主語の意図的な行動を表しません。
目的語の有無: 他動詞として用いられる場合、目的語を伴います。
意図性: 他動詞として用いられる場合、主語は意図的に目的語に対して動作を実行します。
{{提示動詞}} 「彼はドアを{{提示動詞}}。」 意図的な行動
自発的な動作・目的語の有無・意図性・助詞接続・自動他動接尾辞
**{{提示動詞}}**は自動詞なら 対応する他動詞を挙げて、逆ならでは他動詞なら 対応する自動詞を挙げて、
それぞれの例文・類義語と対比・意図的・ニュアンスの違いを比較することで詳しく説明してください。
例文: 「彼女は車を{{提示動詞}}て、目的地に到着した。」
覚えやすくするために、自動詞と他動詞のペアをセット(N+助詞+V)にして暗記する裏技を教えてください。
自動詞と他動詞のペアをセットにして覚えると、理解が深まります。
例文: 「ドアを開ける」- "開ける" は他動詞、目的語 "ドア" を伴います。
例文: 「雨が降る」 - "降る" は自動詞、目的語を伴いません。
さらに、日本語の自動詞と他動詞学習に焦点を当てたおすすめのYouTube動画があれば教えてください。
"""
提示動詞:燃える 燃やす
"""
##################################
💜下面藍色PROMPT提示詞,亦可協助分辨出屬自動詞、他動詞;另外尚可提供背誦技巧。
☺💜補提追問PROMPT提示詞1 : (字詞運用查詢)
さらに深掘りしたい場合は、以下の点も検討してみましょう。
「今回のキーワード字詞」という言葉を含む名言やことわざ・四字熟語、
「今回のキーワード字詞」という言葉と関連する禅や心理学的な概念・俳句や短歌・歴史上の出来事