workpytools 0.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- workpytools/__init__.py +1 -0
- workpytools/cli.py +76 -0
- workpytools/common/__init__.py +0 -0
- workpytools/common/browser_preview.py +40 -0
- workpytools/common/clipboard.py +318 -0
- workpytools/common/clustering.py +85 -0
- workpytools/common/config.py +44 -0
- workpytools/common/embedding.py +101 -0
- workpytools/common/help_gen.py +542 -0
- workpytools/common/logging.py +12 -0
- workpytools/common/markdown_html.py +15 -0
- workpytools/common/outline_parse.py +81 -0
- workpytools/common/output.py +71 -0
- workpytools/common/powerpoint.py +43 -0
- workpytools/common/shape_cluster.py +75 -0
- workpytools/common/table_shapes.py +157 -0
- workpytools/common/tabular.py +248 -0
- workpytools/common/textfile.py +90 -0
- workpytools/common/walk.py +133 -0
- workpytools/data/__init__.py +0 -0
- workpytools/data/synonym.tsv +3 -0
- workpytools/data/user.dic +2 -0
- workpytools/processing/__init__.py +0 -0
- workpytools/processing/base.py +23 -0
- workpytools/processing/clipfmt.py +143 -0
- workpytools/processing/clipmd.py +237 -0
- workpytools/processing/clipview.py +194 -0
- workpytools/processing/cwc.py +427 -0
- workpytools/processing/denoise.py +81 -0
- workpytools/processing/help.py +47 -0
- workpytools/processing/ikko.py +205 -0
- workpytools/processing/kukiri.py +94 -0
- workpytools/processing/lsdir.py +218 -0
- workpytools/processing/mdtsv.py +177 -0
- workpytools/processing/mokuji.py +91 -0
- workpytools/processing/nagasa.py +94 -0
- workpytools/processing/outline.py +85 -0
- workpytools/processing/profiler.py +277 -0
- workpytools/processing/seiretsu.py +111 -0
- workpytools/processing/tbl.py +358 -0
- workpytools/processing/touka.py +52 -0
- workpytools/processing/vv.py +147 -0
- workpytools-0.1.4.dist-info/METADATA +458 -0
- workpytools-0.1.4.dist-info/RECORD +48 -0
- workpytools-0.1.4.dist-info/WHEEL +5 -0
- workpytools-0.1.4.dist-info/entry_points.txt +20 -0
- workpytools-0.1.4.dist-info/licenses/LICENSE +21 -0
- workpytools-0.1.4.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: workpytools
|
|
3
|
+
Version: 0.1.4
|
|
4
|
+
Summary: Collection of Python processing utilities
|
|
5
|
+
License: MIT
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: pillow>=10
|
|
10
|
+
Requires-Dist: rembg[cpu]>=2.0
|
|
11
|
+
Requires-Dist: opencv-python-headless>=4.9
|
|
12
|
+
Requires-Dist: numpy>=1.26
|
|
13
|
+
Requires-Dist: pywin32>=306
|
|
14
|
+
Requires-Dist: janome>=0.5
|
|
15
|
+
Requires-Dist: wordcloud>=1.9
|
|
16
|
+
Requires-Dist: tokenizers>=0.15
|
|
17
|
+
Requires-Dist: onnxruntime>=1.17
|
|
18
|
+
Requires-Dist: markdown-it-py>=3
|
|
19
|
+
Requires-Dist: markdownify>=0.13
|
|
20
|
+
Requires-Dist: beautifulsoup4>=4.12
|
|
21
|
+
Requires-Dist: mdformat>=0.7
|
|
22
|
+
Requires-Dist: mdformat-tables>=1
|
|
23
|
+
Requires-Dist: openpyxl>=3.1
|
|
24
|
+
Requires-Dist: xlsxwriter>=3
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
27
|
+
Requires-Dist: pytest-cov>=5; extra == "dev"
|
|
28
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
29
|
+
Requires-Dist: mypy>=1.11; extra == "dev"
|
|
30
|
+
Requires-Dist: scikit-learn>=1.4; extra == "dev"
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
|
|
33
|
+
# workpytools
|
|
34
|
+
|
|
35
|
+
さまざまな処理をコマンドとして追加していくためのPythonプロジェクト。
|
|
36
|
+
|
|
37
|
+
**動作環境: Windows 11 専用**(クリップボード連携等はWindows APIに依存するため、他OSは考慮しない)
|
|
38
|
+
|
|
39
|
+
## 構成
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
workpytools/
|
|
43
|
+
├── pyproject.toml # 依存関係・lint(ruff)・型チェック(mypy)・pytest設定
|
|
44
|
+
├── src/
|
|
45
|
+
│ └── workpytools/
|
|
46
|
+
│ ├── cli.py # エントリポイント。processing/配下を自動探索してサブコマンド化
|
|
47
|
+
│ ├── common/ # 処理間で使い回す共通機能
|
|
48
|
+
│ │ ├── logging.py
|
|
49
|
+
│ │ ├── config.py
|
|
50
|
+
│ │ └── clipboard.py # クリップボードからの画像/ファイル取得(Windows専用)
|
|
51
|
+
│ └── processing/ # 個々の処理。1ファイル=1処理
|
|
52
|
+
│ ├── base.py # Processor基底クラス
|
|
53
|
+
│ ├── touka.py # 画像背景透過ツール
|
|
54
|
+
│ ├── denoise.py # 画像ノイズ除去ツール(OpenCV Non-local Means)
|
|
55
|
+
│ ├── kukiri.py # JPEG輪郭滲み除去・境界強調ツール(バイラテラル+アンシャープマスク)
|
|
56
|
+
│ ├── cwc.py # テキストからワードクラウド画像を生成するツール
|
|
57
|
+
│ ├── clipmd.py # クリップボードのMarkdown↔リッチテキスト変換
|
|
58
|
+
│ ├── mdtsv.py # クリップボードのMarkdownの表↔TSV変換
|
|
59
|
+
│ ├── clipview.py # クリップボードのMarkdown/HTMLをブラウザでプレビュー
|
|
60
|
+
│ ├── clipfmt.py # クリップボードのMarkdown整形
|
|
61
|
+
│ ├── vv.py # 定型プロンプトをクリップボードにコピー
|
|
62
|
+
│ ├── profiler.py # 表形式データの列プロファイリング(欠損・一意性・主キー候補)
|
|
63
|
+
│ ├── lsdir.py # フォルダ配下をExcelで集計できる表形式で一覧化
|
|
64
|
+
│ ├── outline.py # クリップボードのアウトラインからPowerPointにスライドを追加
|
|
65
|
+
│ ├── ikko.py # PowerPointのバラバラなテキストボックスを1つに合体
|
|
66
|
+
│ ├── mokuji.py # PowerPointの全スライドタイトルを一覧化してクリップボードへ
|
|
67
|
+
│ ├── tbl.py # PowerPointの表とシェイプ群を相互変換(分解/合成/行分割)
|
|
68
|
+
│ ├── seiretsu.py # PowerPointのシェイプを表に変換せず格子状に整列
|
|
69
|
+
│ ├── nagasa.py # PowerPointのシェイプの幅・高さを最大値に統一
|
|
70
|
+
│ └── help.py # 全コマンドのヘルプ一覧をブラウザで開く
|
|
71
|
+
├── tests/ # src/workpytools と同じ階層構造でテストを配置
|
|
72
|
+
├── configs/ # 処理ごとの設定ファイル(TOML)を置く場所(common/config.py で読み込み)
|
|
73
|
+
├── scripts/ # 動作確認用の使い捨てスクリプト(.gitignore対象。
|
|
74
|
+
│ # ただし gen_help.py と pre-commit は例外的にバージョン管理する)
|
|
75
|
+
└── tmp/ # 一時ファイル・実行結果ダンプなど(.gitignore対象)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 新しい処理の追加方法
|
|
79
|
+
|
|
80
|
+
1. `src/workpytools/processing/` に新しいモジュールを作成する
|
|
81
|
+
2. `Processor` を継承したクラスを定義し、`name`(サブコマンド名)と
|
|
82
|
+
`add_arguments` / `run` を実装する(`touka.py` や `denoise.py` を参照)
|
|
83
|
+
3. それだけで`tools <name>`としてCLIに自動登録される(`cli.py` の編集は不要)
|
|
84
|
+
4. **単体実行用のエントリーポイントも追加する**: `pyproject.toml` の
|
|
85
|
+
`[project.scripts]` に `name`(`Processor.name`と同じ文字列)を
|
|
86
|
+
`workpytools.cli:run_as_subcommand` として登録する。これにより
|
|
87
|
+
`pip install -e .` 後、`tools <name> ...` に加えて `<name> ...`
|
|
88
|
+
(Windowsでは `<name>.exe ...`)としても直接実行できるようになる。
|
|
89
|
+
|
|
90
|
+
```toml
|
|
91
|
+
[project.scripts]
|
|
92
|
+
my-process = "workpytools.cli:run_as_subcommand"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
```python
|
|
96
|
+
# src/workpytools/processing/my_process.py
|
|
97
|
+
from workpytools.processing.base import Processor
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class MyProcess(Processor):
|
|
101
|
+
name = "my-process"
|
|
102
|
+
help = "何をする処理か"
|
|
103
|
+
|
|
104
|
+
def add_arguments(self, parser):
|
|
105
|
+
parser.add_argument("input")
|
|
106
|
+
|
|
107
|
+
def run(self, args) -> int:
|
|
108
|
+
...
|
|
109
|
+
return 0
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## セットアップ(Windows / PowerShell)
|
|
113
|
+
|
|
114
|
+
```powershell
|
|
115
|
+
python -m venv .venv
|
|
116
|
+
.venv\Scripts\activate
|
|
117
|
+
pip install -e ".[dev]"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### pre-commitフックの導入(`doc/help.html`の自動更新)
|
|
121
|
+
|
|
122
|
+
`doc/help.html`(全コマンドのヘルプ一覧、`help`/`toolh.exe`が開くページ)は
|
|
123
|
+
コミット時に自動再生成されるようにしています。`.git/hooks/`はリポジトリに含まれないため、
|
|
124
|
+
クローン後に一度だけ導入してください。
|
|
125
|
+
|
|
126
|
+
```powershell
|
|
127
|
+
Copy-Item scripts\pre-commit .git\hooks\pre-commit
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
以降、`git commit`のたびに `python scripts/gen_help.py` が実行され、
|
|
131
|
+
`doc/help.html`に変更があればコミットに自動で含まれます。
|
|
132
|
+
|
|
133
|
+
## 実行
|
|
134
|
+
|
|
135
|
+
```powershell
|
|
136
|
+
# 画像の背景を透過(ファイルパス指定)
|
|
137
|
+
tools touka C:\path\to\photo.jpg
|
|
138
|
+
|
|
139
|
+
# 画像の背景を透過(クリップボードから取得)
|
|
140
|
+
# - 画像編集ソフトで「画像をコピー」した場合、または
|
|
141
|
+
# - Explorerで画像ファイルをコピー(Ctrl+C)した場合
|
|
142
|
+
tools touka
|
|
143
|
+
|
|
144
|
+
# 出力先を指定
|
|
145
|
+
tools touka C:\path\to\photo.jpg -o C:\path\to\out.png
|
|
146
|
+
|
|
147
|
+
# 画像のノイズ除去(ファイルパス指定)
|
|
148
|
+
tools denoise C:\path\to\photo.jpg
|
|
149
|
+
|
|
150
|
+
# 画像のノイズ除去(クリップボードから取得)
|
|
151
|
+
tools denoise
|
|
152
|
+
|
|
153
|
+
# ノイズ除去強度を指定(デフォルト: 10.0、大きいほど強くノイズを除去)
|
|
154
|
+
tools denoise C:\path\to\photo.jpg --strength 15
|
|
155
|
+
|
|
156
|
+
# 出力先を指定
|
|
157
|
+
tools denoise C:\path\to\photo.jpg -o C:\path\to\out.png
|
|
158
|
+
|
|
159
|
+
# JPEGの輪郭滲みを除去し境界をくっきりさせる(フラットイラスト向け)
|
|
160
|
+
tools kukiri C:\path\to\illustration.jpg
|
|
161
|
+
|
|
162
|
+
# 平滑化・シャープ強度を指定(デフォルト: smooth=75.0, sharpen=0.5)
|
|
163
|
+
tools kukiri C:\path\to\illustration.jpg --smooth 90 --sharpen 0.8
|
|
164
|
+
|
|
165
|
+
# 出力先を指定
|
|
166
|
+
tools kukiri C:\path\to\illustration.jpg -o C:\path\to\out.png
|
|
167
|
+
|
|
168
|
+
# テキストからワードクラウド画像を生成(ファイルパス指定)
|
|
169
|
+
tools cwc C:\path\to\memo.txt
|
|
170
|
+
|
|
171
|
+
# クリップボードのテキストから生成
|
|
172
|
+
tools cwc
|
|
173
|
+
|
|
174
|
+
# Janomeによる分かち書きで分割
|
|
175
|
+
tools cwc C:\path\to\memo.txt -w
|
|
176
|
+
|
|
177
|
+
# 名詞・動詞のみを集計(分かち書きを自動的に使用)
|
|
178
|
+
tools cwc C:\path\to\memo.txt --hinshi 名詞 動詞
|
|
179
|
+
|
|
180
|
+
# 同義語辞書で表記ゆれを1語に寄せる(既定の区切り文字分割専用)
|
|
181
|
+
tools cwc C:\path\to\memo.txt --semantic
|
|
182
|
+
|
|
183
|
+
# 集計単位を文にし、埋め込みベクトルの類似度で似た文をまとめる
|
|
184
|
+
# (アンケート自由記述など、表現違いの同趣旨回答をまとめたい場合向け)
|
|
185
|
+
tools cwc C:\path\to\answers.txt --similar
|
|
186
|
+
|
|
187
|
+
# 出力先を指定
|
|
188
|
+
tools cwc C:\path\to\memo.txt -o C:\path\to\out.png
|
|
189
|
+
|
|
190
|
+
# クリップボードのMarkdownとリッチテキストを相互変換(クリップボードの状態から自動判別)
|
|
191
|
+
# - リッチテキストがコピーされていればMarkdownに変換
|
|
192
|
+
# - Markdown(プレーンテキスト)がコピーされていればリッチテキストに変換
|
|
193
|
+
tools clipmd
|
|
194
|
+
|
|
195
|
+
# 変換方向を明示指定
|
|
196
|
+
tools clipmd --to-markdown
|
|
197
|
+
tools clipmd --to-rich
|
|
198
|
+
|
|
199
|
+
# クリップボードのMarkdownの表とTSVを相互変換(Excelとのやり取り用)
|
|
200
|
+
tools mdtsv
|
|
201
|
+
|
|
202
|
+
# クリップボードのMarkdown/HTMLをブラウザでプレビュー
|
|
203
|
+
tools clipview
|
|
204
|
+
|
|
205
|
+
# クリップボードのMarkdownを整形(表の桁揃え、見出し統一、リスト記号統一など)
|
|
206
|
+
tools clipfmt
|
|
207
|
+
|
|
208
|
+
# 定型プロンプトの一覧を表示(クリップボードには何も入れない)
|
|
209
|
+
tools vv
|
|
210
|
+
|
|
211
|
+
# 番号を指定して、そのプロンプトをクリップボードにコピー(あとはCtrl+Vで貼るだけ)
|
|
212
|
+
tools vv 3
|
|
213
|
+
|
|
214
|
+
# 表形式データ(CSV/TSV/Excel/JSON)の各列をプロファイル(ファイルパス指定)
|
|
215
|
+
tools profiler C:\path\to\data.csv
|
|
216
|
+
|
|
217
|
+
# クリップボードのTSV(Excelで範囲コピーしたものなど)をプロファイル
|
|
218
|
+
tools profiler
|
|
219
|
+
|
|
220
|
+
# 結果をExcelファイルに書き出す(欠損・重複が疑わしいセルを赤塗り)
|
|
221
|
+
tools profiler C:\path\to\data.xlsx -o C:\path\to\profile.xlsx
|
|
222
|
+
|
|
223
|
+
# 結果をブラウザでプレビュー
|
|
224
|
+
tools profiler C:\path\to\data.csv --view
|
|
225
|
+
|
|
226
|
+
# フォルダ配下をExcelで集計できる表形式で一覧化
|
|
227
|
+
tools lsdir C:\path\to\folder
|
|
228
|
+
|
|
229
|
+
# ファイルのみ/フォルダのみに絞り込む
|
|
230
|
+
tools lsdir C:\path\to\folder --files-only
|
|
231
|
+
tools lsdir C:\path\to\folder --dirs-only
|
|
232
|
+
|
|
233
|
+
# フォルダ配下の合計サイズも計算する(全走査後に出力するため待ち時間が発生する)
|
|
234
|
+
tools lsdir C:\path\to\folder --total-size
|
|
235
|
+
|
|
236
|
+
# .lnkショートカットのリンク先も解決する
|
|
237
|
+
tools lsdir C:\path\to\folder --resolve-link
|
|
238
|
+
|
|
239
|
+
# 結果をExcelファイルに書き出す
|
|
240
|
+
tools lsdir C:\path\to\folder -o C:\path\to\list.xlsx
|
|
241
|
+
|
|
242
|
+
# クリップボードのアウトライン(Markdown見出し/タブ区切り/空行区切り)から
|
|
243
|
+
# アクティブなPowerPointにスライドを追加する
|
|
244
|
+
tools outline
|
|
245
|
+
|
|
246
|
+
# PowerPointのスライド上でバラバラなテキストボックスを1つに合体する
|
|
247
|
+
# (選択中ならその範囲のみ、未選択ならアクティブスライド全体が対象)
|
|
248
|
+
tools ikko
|
|
249
|
+
|
|
250
|
+
# 実際には変更せず、合体対象になる組み合わせだけを確認する
|
|
251
|
+
tools ikko --dry-run
|
|
252
|
+
|
|
253
|
+
# アクティブなPowerPointの全スライドタイトルを一覧化してクリップボードにコピーする
|
|
254
|
+
tools mokuji
|
|
255
|
+
|
|
256
|
+
# PowerPointの表とシェイプ群を相互変換する(選択状態から自動判定)
|
|
257
|
+
# - 表を選択 → セルごとの四角形に分解
|
|
258
|
+
# - 四角形群を2つ以上選択 → 座標から表を推定して合成
|
|
259
|
+
# - 複数行テキストのシェイプを1つ選択 → 行ごとのシェイプに分割
|
|
260
|
+
tools tbl
|
|
261
|
+
|
|
262
|
+
# 選択したシェイプを表に変換せず、位置だけを格子状に整列する
|
|
263
|
+
tools seiretsu
|
|
264
|
+
|
|
265
|
+
# 選択したシェイプの幅・高さを最大値に統一する(中心を保ったまま拡大)
|
|
266
|
+
tools nagasa
|
|
267
|
+
|
|
268
|
+
# 全コマンドのヘルプ一覧(doc/help.html)をブラウザで開く
|
|
269
|
+
tools help
|
|
270
|
+
# 単体実行ファイルはtoolh.exe(他コマンドと違いhelp.exeという名前ではない)
|
|
271
|
+
toolh
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
`touka` は初回実行時に背景除去モデル(U2Net, rembg)をインターネットからダウンロードします。
|
|
275
|
+
`denoise`・`kukiri`はOpenCVの古典的アルゴリズムのみを使用し、モデルダウンロードは行いません(外部通信なし)。
|
|
276
|
+
|
|
277
|
+
`kukiri`は`denoise`とは異なり、ランダムノイズではなくJPEG圧縮特有の輪郭のにじみ・リンギングを
|
|
278
|
+
対象にしています。バイラテラルフィルタ(輪郭を保ったまま平滑化)→アンシャープマスク(輪郭強調)
|
|
279
|
+
の順に処理し、フラットデザインのイラストなど「境界をくっきりさせたい」用途向けです。
|
|
280
|
+
|
|
281
|
+
`cwc`はテキストを単語に分割して頻度を集計し、`wordcloud`ライブラリでワードクラウド画像を
|
|
282
|
+
生成します。既定は句点・かっこ・空白類による単純な区切り文字分割で、外部モデルのダウンロードは
|
|
283
|
+
不要です。日本語を分かち書きしたい場合は`-w`(Janome、純Python実装で外部辞書のインストール不要)
|
|
284
|
+
を指定します。フォントは既定でWindows標準搭載のメイリオ(`C:\Windows\Fonts\meiryo.ttc`)を使うため、
|
|
285
|
+
別途フォントの用意は不要です。
|
|
286
|
+
|
|
287
|
+
`--similar`は集計単位を語ではなく文にし、埋め込みベクトルの類似度で似た文をまとめて集計します。
|
|
288
|
+
**初回実行時にのみ**埋め込みモデル(ONNX形式、`Xenova/paraphrase-multilingual-MiniLM-L12-v2`の
|
|
289
|
+
量子化版、約120MB)を `https://huggingface.co` からダウンロードします。IT部門でプロキシ/EDRの
|
|
290
|
+
アローリスト登録が必要な場合は、このホストを登録してください。ダウンロードしたモデルは
|
|
291
|
+
`%LOCALAPPDATA%\workpytools\models\` にキャッシュされ、2回目以降は再ダウンロードしません。
|
|
292
|
+
|
|
293
|
+
`clipmd`/`mdtsv`/`clipview`/`clipfmt`はクリップボードの内容をその場で変換・表示するツール群です。
|
|
294
|
+
入力も出力もファイルではなくクリップボード経由(`clipview`のみプレビュー用に一時HTMLを生成)で、
|
|
295
|
+
`tools <name>` を実行した瞬間にクリップボードの中身を読み書きします(バックグラウンド監視はしません)。
|
|
296
|
+
役割の違いは以下の通りです。
|
|
297
|
+
|
|
298
|
+
| コマンド | 役割 |
|
|
299
|
+
|---|---|
|
|
300
|
+
| `clipmd` | Markdown ↔ リッチテキスト の文書全体の形式変換 |
|
|
301
|
+
| `mdtsv` | Markdownの表 ↔ TSV の表だけの変換(Excelとの橋渡し) |
|
|
302
|
+
| `clipview` | Markdown/HTML をブラウザでプレビュー(クリップボードは変更しない) |
|
|
303
|
+
| `clipfmt` | Markdown の整形(表の桁揃え、見出し・リスト記号の統一など) |
|
|
304
|
+
|
|
305
|
+
`clipview`のみ、プレビュー用に `%TEMP%\workpytools_clipview_preview.html` を固定名で生成します
|
|
306
|
+
(毎回上書きするためファイルは増殖しません)。
|
|
307
|
+
|
|
308
|
+
### vv(定型プロンプトの呼び出し)
|
|
309
|
+
|
|
310
|
+
よく使う長文プロンプトを、フォルダを開いて探して全選択コピーする手間なしに
|
|
311
|
+
クリップボードへ入れるコマンドです。
|
|
312
|
+
|
|
313
|
+
`%APPDATA%\workpytools\vv\` に **1ファイル1プロンプトの `.txt`** を置いておくと、
|
|
314
|
+
ファイル名がそのままプロンプト名として一覧に出ます。
|
|
315
|
+
|
|
316
|
+
```powershell
|
|
317
|
+
# 一覧を見る(クリップボードには何も入らない)
|
|
318
|
+
vv
|
|
319
|
+
# 1: 01_企画書雛形 以下の要件で企画書のドラフトを作成してくだ...
|
|
320
|
+
# 2: 02_謝罪メール 下記の状況について、取引先向けの謝罪メール...
|
|
321
|
+
|
|
322
|
+
# 番号を指定して即コピー(一覧は出ない)→ あとは貼りたい場所で Ctrl+V
|
|
323
|
+
vv 1
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
- 並び順はファイル名順です。よく使うものを上に出したい場合は
|
|
327
|
+
`01_` のような接頭辞をファイル名に付けてください
|
|
328
|
+
(日本語名はUnicode順のため五十音順にはなりません)
|
|
329
|
+
- 貼り付け(Ctrl+V)は利用者が行います。キー入力の自動送信は行いません
|
|
330
|
+
- 改行はWindowsの慣習に合わせてCRLFに統一してクリップボードへ入れます
|
|
331
|
+
|
|
332
|
+
### profiler(表形式データのプロファイリング)
|
|
333
|
+
|
|
334
|
+
CSV/TSV/Excel/JSONの各列について、行数・欠損数・充填率・一意数・一意率・
|
|
335
|
+
頻度上位・主キー候補らしさ(`key_score`、充填率と一意率の調和平均)を算出します。
|
|
336
|
+
ファイルパスを指定しない場合はクリップボードのTSV(Excelで範囲コピーした内容など)を読みます。
|
|
337
|
+
Excel入力を含むときのみ`sheet`列が追加されます。`--clip`でクリップボードへ、
|
|
338
|
+
`--view`でブラウザプレビュー、`-o`でTSV/xlsxファイルへ出力できます
|
|
339
|
+
(既定は標準出力)。
|
|
340
|
+
|
|
341
|
+
### lsdir(フォルダ一覧のExcel向け表形式出力)
|
|
342
|
+
|
|
343
|
+
指定フォルダ配下を再帰的に走査し、`source, type, name, fullpath, parent, ext,
|
|
344
|
+
size, mtime, depth`の固定列で一覧化します。サイズは既定でKB(小数第2位)、
|
|
345
|
+
`--unit b/kb/mb/gb`で切り替え可能です(1KB=1024)。`--total-size`は
|
|
346
|
+
フォルダ配下の合計サイズも計算しますが、全走査完了後でないと出せないため
|
|
347
|
+
オプトインです。`.lnk`ショートカットのリンク先は`--resolve-link`を指定した
|
|
348
|
+
場合のみ解決します(`WScript.Shell`経由)。複数フォルダを指定して起点が
|
|
349
|
+
重複する場合はフルパスで自動的に重複除去されます。
|
|
350
|
+
|
|
351
|
+
### PowerPointをCOM操作するコマンド(outline / ikko / mokuji / tbl / seiretsu / nagasa)
|
|
352
|
+
|
|
353
|
+
いずれも実行中のPowerPointを対象にします(`pywin32`経由、`python-pptx`は
|
|
354
|
+
「開いているファイル」を操作できないため使いません)。役割は以下の通りです。
|
|
355
|
+
|
|
356
|
+
| コマンド | 役割 |
|
|
357
|
+
| --- | --- |
|
|
358
|
+
| `outline` | クリップボードのアウトラインからスライドを新規に追加する |
|
|
359
|
+
| `ikko` | すでにあるスライド上のバラバラなテキストボックスを1つに合体する |
|
|
360
|
+
| `mokuji` | 全スライドのタイトルを一覧化してクリップボードにコピーする |
|
|
361
|
+
| `tbl` | PowerPointの表とシェイプ群を相互変換する(選択状態から自動判定) |
|
|
362
|
+
| `seiretsu` | 選択したシェイプを表に変換せず格子状の位置に整列する |
|
|
363
|
+
| `nagasa` | 選択したシェイプの幅・高さを最大値に統一する |
|
|
364
|
+
|
|
365
|
+
- `outline`はクリップボードのテキストを**Markdown見出し(`#`等)/タブ区切り
|
|
366
|
+
/空行区切り**の3形式から自動判別し、抽出した項目ぶんのスライドを
|
|
367
|
+
アクティブなプレゼンテーションの末尾に追加します。PowerPointが
|
|
368
|
+
起動していない場合は新規に起動し、新規プレゼンテーションを作成して
|
|
369
|
+
続行します。目次スライドの生成は行いません(`mokuji`が担います)
|
|
370
|
+
- `ikko`はSVGを「図形に変換」した際に1行ずつ分割されてしまった
|
|
371
|
+
テキストボックス群を、フォント・座標・行送りが揃った隣接シェイプの
|
|
372
|
+
かたまりとして検出し、1つのテキストボックス(複数段落)に合体します。
|
|
373
|
+
処理直前に必ずUndo境界を打つため、**Ctrl+Zひと押しで合体前の状態に
|
|
374
|
+
戻せます**。`--dry-run`で実際に変更せず対象を確認できます。
|
|
375
|
+
PowerPointが起動していない、またはプレゼンテーションが開かれていない
|
|
376
|
+
場合は新規起動せずエラーになります(既存のスライドを加工する
|
|
377
|
+
コマンドのため)
|
|
378
|
+
- `mokuji`はタイトルプレースホルダーが空でも、スライド上で最も上にある
|
|
379
|
+
テキストを代用してタイトルを推定します。結果はタイトルのみを1行1件で
|
|
380
|
+
クリップボードにコピーします(番号は付きません)。`ikko`と同じく
|
|
381
|
+
PowerPointが起動していない場合はエラーになります
|
|
382
|
+
- `tbl`は選択状態から変換方向を自動判定します。**表を選択**すればセルごとの
|
|
383
|
+
四角形に分解し(隣接シェイプ同士が重ならないよう、セルサイズの5%を目安に
|
|
384
|
+
上下左右へ間隔を空けます)、**四角形群を2つ以上選択**すれば座標から行・列を
|
|
385
|
+
推定して表に合成します(間隔が不揃いでも推定できます)。**複数行テキストの
|
|
386
|
+
シェイプを1つだけ選択**した場合は行ごとに独立したシェイプへ分割します
|
|
387
|
+
(空行はスキップ)。`ikko`と同じくUndo境界を必ず打つため、Ctrl+Z一回で
|
|
388
|
+
元に戻せます。何も選択していない場合はエラーになります(分解・合成・
|
|
389
|
+
行分割のどれを行うか自動推測しないため)
|
|
390
|
+
- `seiretsu`は`tbl`の合成方向と似た状況(座標がバラバラなシェイプ群)を
|
|
391
|
+
対象にしますが、**表オブジェクトへの変換は行わず**、選択したシェイプの
|
|
392
|
+
個数・形状・書式をそのまま保ったうえで**位置(`Left`/`Top`)だけ**を
|
|
393
|
+
格子状に並べ直します。各列・各行のセルサイズはその列・行内で最大の
|
|
394
|
+
シェイプに合わせるため、サイズが大きく異なるシェイプが混在していても
|
|
395
|
+
重なりません。2つ以上選択されていない場合はエラーになります
|
|
396
|
+
- `nagasa`は選択したシェイプの幅・高さを、それぞれの最大値へ統一します。
|
|
397
|
+
各シェイプは**中心座標を固定**したまま拡大するため、`seiretsu`で
|
|
398
|
+
整列した後に使っても位置関係が崩れません。**「テキストに合わせて図形の
|
|
399
|
+
サイズを調整する」設定(`AutoSize`)が有効だと、リサイズ後にテキストを
|
|
400
|
+
編集した際にサイズが自動調整で巻き戻る事故が実機で確認されたため、
|
|
401
|
+
リサイズ前に対象シェイプの`AutoSize`を無効化します**。2つ以上選択
|
|
402
|
+
されていない場合はエラーになります
|
|
403
|
+
|
|
404
|
+
各サブコマンドは `tools <name>` の他に、単体の実行ファイルとしても呼び出せます
|
|
405
|
+
(`pip install -e .` でインストールされる `touka.exe` / `denoise.exe` / `kukiri.exe` / `cwc.exe` /
|
|
406
|
+
`clipmd.exe` / `mdtsv.exe` / `clipview.exe` / `clipfmt.exe` / `vv.exe` /
|
|
407
|
+
`profiler.exe` / `lsdir.exe` / `outline.exe` / `ikko.exe` / `mokuji.exe` /
|
|
408
|
+
`tbl.exe` / `seiretsu.exe` / `nagasa.exe` など)。
|
|
409
|
+
|
|
410
|
+
### 出力先のデフォルト(`-o`省略時)
|
|
411
|
+
|
|
412
|
+
入力パターンごとに、出力の扱いが異なります(`cwc`は入力がテキストになりますが同じ規約に従います)。
|
|
413
|
+
|
|
414
|
+
| 入力パターン | デフォルトの挙動 |
|
|
415
|
+
|---|---|
|
|
416
|
+
| ファイルパス指定 | 元ファイルと同じ場所に `{元のファイル名}_<コマンド名>.png` を保存 |
|
|
417
|
+
| クリップボードのファイルオブジェクト(Explorerでコピーした実ファイル) | OS一時ディレクトリ(`%TEMP%`)に `{元のファイル名}_<コマンド名>.png` を保存し、そのファイルをクリップボードにコピー(Ctrl+Vで貼り付け可能な状態にする) |
|
|
418
|
+
| クリップボードの画像データ(画像ソフトの「コピー」等、元ファイルなし) | ファイルには保存せず、処理後の画像データをそのままクリップボードにコピー(Ctrl+Vで貼り付け可能な状態にする) |
|
|
419
|
+
|
|
420
|
+
```powershell
|
|
421
|
+
denoise C:\path\to\photo.jpg
|
|
422
|
+
touka C:\path\to\photo.jpg
|
|
423
|
+
kukiri C:\path\to\illustration.jpg
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
## テスト・lint
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
pytest
|
|
430
|
+
ruff check .
|
|
431
|
+
mypy src
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
## バージョン管理
|
|
435
|
+
|
|
436
|
+
[Semantic Versioning](https://semver.org/lang/ja/)(`MAJOR.MINOR.PATCH`)を採用する。
|
|
437
|
+
|
|
438
|
+
- バージョン番号は `pyproject.toml` の `version` で管理する
|
|
439
|
+
- **コミットのたびにパッチ番号(`PATCH`)を+1する運用**とする
|
|
440
|
+
(例: `0.1.0` → `0.1.1`)。MINOR/MAJORの繰り上げは、破壊的変更や
|
|
441
|
+
まとまった機能追加の際に人間が明示的に指示した場合のみ行う
|
|
442
|
+
- コミットのたびに以下を同時に行う
|
|
443
|
+
1. `pyproject.toml` の `version` のパッチ番号を+1する
|
|
444
|
+
2. `CHANGELOG.md` に変更内容を追記する
|
|
445
|
+
3. コミット後、`git tag -a vX.Y.Z -m "..."` でタグを打つ
|
|
446
|
+
(`pyproject.toml`のversionとgit tagは常に一致させる)
|
|
447
|
+
- 変更履歴は [CHANGELOG.md](CHANGELOG.md) を参照
|
|
448
|
+
|
|
449
|
+
## ライセンス
|
|
450
|
+
|
|
451
|
+
MIT License([LICENSE](LICENSE)を参照)。
|
|
452
|
+
|
|
453
|
+
依存ライブラリはMIT/BSD/Apache 2.0などの寛容型ライセンスのみで構成しており、
|
|
454
|
+
本プロジェクトをMITとすること自体に支障はない。ただし`opencv-python-headless`・
|
|
455
|
+
`janome`・`tokenizers`はApache 2.0であり、**exe化して配布する場合**は
|
|
456
|
+
同梱ライブラリとしてその旨・著作権表示を配布物に添付することが望ましい
|
|
457
|
+
(PyPI経由でインストールして使うだけの開発環境では、各パッケージの
|
|
458
|
+
`dist-info`がライセンス表示を担うため追加対応は不要)。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
workpytools/__init__.py,sha256=WnKcgam-ZkGQyheEEdILmDSPd-HRHd1RlXi05oMEFOw,49
|
|
2
|
+
workpytools/cli.py,sha256=rm9XbBf5KPx4NbOD7iXH3nQ3CDSlnwAxfsGehZgEOWY,2710
|
|
3
|
+
workpytools/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
workpytools/common/browser_preview.py,sha256=GrUnj0-A8BcNhC_ambklwXpr6zD8S8ZU5gR0hXGD-Jo,1303
|
|
5
|
+
workpytools/common/clipboard.py,sha256=UNRgS6-iOT0lwRb7ux0-5bDWwWpIweBfcOfeP-6G3Yw,11451
|
|
6
|
+
workpytools/common/clustering.py,sha256=3YE1bsyqGyYcTvVvzOVph-VtNY_kdwgYLbt2-DEo0SI,2969
|
|
7
|
+
workpytools/common/config.py,sha256=1Fz-KG29fTUOPoc-ZIlOjem66WvTRJ7kjamjLrLBchM,1309
|
|
8
|
+
workpytools/common/embedding.py,sha256=3HvAGLYM1WGGFWlXB1iegHEejIyvMZJOQulSSLy0UvY,3512
|
|
9
|
+
workpytools/common/help_gen.py,sha256=U639GCBB3OSkvQGy9KQ9skbpZ7xgATUxgGrbOguO3ho,26194
|
|
10
|
+
workpytools/common/logging.py,sha256=VNC2B459osR89CLXlXDNwOWBJ3x4CHGp7X5pvAIB8j8,259
|
|
11
|
+
workpytools/common/markdown_html.py,sha256=Ieyz5M9Om1_uSMRCwgdJ4xrSTROVMlvCalMRiMf1E1s,532
|
|
12
|
+
workpytools/common/outline_parse.py,sha256=Hh4EMuHRbdSBz6JNvmxLaCB_7rPYrC3mO4rFQho74JE,2466
|
|
13
|
+
workpytools/common/output.py,sha256=9AHgtsh9PVDij6caPEXPtd-QfOIn2gbib3-j3KCRKuA,2590
|
|
14
|
+
workpytools/common/powerpoint.py,sha256=ZkLggH3m_JvuwF2JvQo7aV6LuciduPPPQcMm6KsWt0k,1360
|
|
15
|
+
workpytools/common/shape_cluster.py,sha256=U-uzSi0IFJOwu5BQ1wcuEHJBqk3AiRUyqmstoZBpaaU,2099
|
|
16
|
+
workpytools/common/table_shapes.py,sha256=hvyeVaJPMADmvmdva1OclUn16O_eK6LPSqumP414q-8,5479
|
|
17
|
+
workpytools/common/tabular.py,sha256=UF7-Qr5XtkGyPrcEpgXpe8TR70ztgNHF-RFAqEuHysY,7974
|
|
18
|
+
workpytools/common/textfile.py,sha256=1WY6O3-Ulqsf778TSdTETIkICFz320JTtiuLEcHTzAE,2876
|
|
19
|
+
workpytools/common/walk.py,sha256=N-iVilZwLL1JENC2Pt6FlUW0Ij9cbPIQkfgvD_K-6EM,4576
|
|
20
|
+
workpytools/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
workpytools/data/synonym.tsv,sha256=0gtplUlhYzOpKmogcYMpbVAht2BYd0yZwesMjP6VEbw,219
|
|
22
|
+
workpytools/data/user.dic,sha256=am8ifyBm0XbvaQFhT8bxDKt9Toie0pP1UQyw5w7Hi8M,152
|
|
23
|
+
workpytools/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
workpytools/processing/base.py,sha256=LxF0zFQLa6kjMgx-ZOFHdGi73XU_noUwZ4M_36ap_8Y,638
|
|
25
|
+
workpytools/processing/clipfmt.py,sha256=oszBvn7lwkljGqaGUBuDYkFtMz_9KVHKbKIfKKfnQ5Q,4744
|
|
26
|
+
workpytools/processing/clipmd.py,sha256=TOgzt7JunqN5Trc5c1D8WEBSbLB_9InneSWmWpkAJuM,9780
|
|
27
|
+
workpytools/processing/clipview.py,sha256=_ZVYAN6rGM6qV2cyu4-8-ltxGv3xYKpy5EPcFm_OWF8,6650
|
|
28
|
+
workpytools/processing/cwc.py,sha256=k5KHgbiEJSTDeCrFK5Ovxd8D9KqmYnQyqzkVWVhPmCI,15774
|
|
29
|
+
workpytools/processing/denoise.py,sha256=ObjKBDbL2U86zHVw6jm1XJXVpisIdTfK_UDjjR7mmxI,2955
|
|
30
|
+
workpytools/processing/help.py,sha256=0BoQdskXx1oYszpfxraFuI304Qi4SjxLzN7dUsuu61k,1687
|
|
31
|
+
workpytools/processing/ikko.py,sha256=8Krgv5V6Rx7xlRZDPgLDkP9MJa1Vnwh926qjQ_0cO5s,7640
|
|
32
|
+
workpytools/processing/kukiri.py,sha256=UZVkOL_mtotqCG2whBGhKqA5phIKOr-AmppyMoijGyw,3570
|
|
33
|
+
workpytools/processing/lsdir.py,sha256=uCCA-KP6XzHzU89w3Fii60Mmp2lJOVrC8Q-R5AyrGe0,8074
|
|
34
|
+
workpytools/processing/mdtsv.py,sha256=a4ot0Qa3Lf17FB_KdXjAP0y3lNSscFtpw3VJXGEqCTE,6062
|
|
35
|
+
workpytools/processing/mokuji.py,sha256=CzskKHdMWpkWJHLmv5tqzNCAHWyWkQOAhjWsAHEMgyQ,3270
|
|
36
|
+
workpytools/processing/nagasa.py,sha256=uSxCwmWuHTIXUwd-DD30NWMXtCoovVar--SeoFVH29w,3388
|
|
37
|
+
workpytools/processing/outline.py,sha256=SqmehXgEmXHWxVvEfoWlm657ZLmSeeMko_RCurhgq3Q,3287
|
|
38
|
+
workpytools/processing/profiler.py,sha256=Q8PmFGWSVC5wrtFk4WKbPB_yEXgyZoFHaKU5wKduydI,9758
|
|
39
|
+
workpytools/processing/seiretsu.py,sha256=oEOF-QPgNZWQIHh2Uz9Kp2m-Y-ZRVBgWJvZXKlNavfA,3991
|
|
40
|
+
workpytools/processing/tbl.py,sha256=MytBcnEApWblV7gLD8i956g6CinJu_LQmBpJTK5zBpQ,13934
|
|
41
|
+
workpytools/processing/touka.py,sha256=YoIHKUlftMSVNgwd1xKyB1iMavKGIDrzyWW_xGyu20k,1984
|
|
42
|
+
workpytools/processing/vv.py,sha256=BPHkmwWFoT-zyL8Xm1UZqk68zrZ40dkYFjh5I2JSjZs,4871
|
|
43
|
+
workpytools-0.1.4.dist-info/licenses/LICENSE,sha256=OzbqD4RAoX_vfavJb5rmzQeV_J_sV_L6EX1z-DuyA1I,1065
|
|
44
|
+
workpytools-0.1.4.dist-info/METADATA,sha256=CHCd1KET0p9ZbWm51TUX3dso3vd8QaBz5shs-2Vvbk0,25602
|
|
45
|
+
workpytools-0.1.4.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
46
|
+
workpytools-0.1.4.dist-info/entry_points.txt,sha256=-kKvf5H5SvvZFDpy2kbmOxC2n9lPDTNF_JWuVLCNOps,814
|
|
47
|
+
workpytools-0.1.4.dist-info/top_level.txt,sha256=8ejX8EK_2HnoS3n5Srm1FHomqgorhSky9YtOPbB7dlQ,12
|
|
48
|
+
workpytools-0.1.4.dist-info/RECORD,,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
clipfmt = workpytools.cli:run_as_subcommand
|
|
3
|
+
clipmd = workpytools.cli:run_as_subcommand
|
|
4
|
+
clipview = workpytools.cli:run_as_subcommand
|
|
5
|
+
cwc = workpytools.cli:run_as_subcommand
|
|
6
|
+
denoise = workpytools.cli:run_as_subcommand
|
|
7
|
+
ikko = workpytools.cli:run_as_subcommand
|
|
8
|
+
kukiri = workpytools.cli:run_as_subcommand
|
|
9
|
+
lsdir = workpytools.cli:run_as_subcommand
|
|
10
|
+
mdtsv = workpytools.cli:run_as_subcommand
|
|
11
|
+
mokuji = workpytools.cli:run_as_subcommand
|
|
12
|
+
nagasa = workpytools.cli:run_as_subcommand
|
|
13
|
+
outline = workpytools.cli:run_as_subcommand
|
|
14
|
+
profiler = workpytools.cli:run_as_subcommand
|
|
15
|
+
seiretsu = workpytools.cli:run_as_subcommand
|
|
16
|
+
tbl = workpytools.cli:run_as_subcommand
|
|
17
|
+
toolh = workpytools.cli:run_as_subcommand
|
|
18
|
+
tools = workpytools.cli:main
|
|
19
|
+
touka = workpytools.cli:run_as_subcommand
|
|
20
|
+
vv = workpytools.cli:run_as_subcommand
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 kirin123
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
workpytools
|