見出し画像

noteで書いた「全ての文字数」をカウントする方法

これまで書いた記事が
何文字」か気になった。

noteにはエクスポート機能があるので、
出力してテキスト形式にした後マージして、
すぐにカウントできるだろう、と思った。

しかし、少し手間取ったので、
手順をここにまとめておく。

この手順に関しては、
ネットをザっと見ても出てこなかった。

誰か記事にはしていると思われるが、
少なくとも検索上位には来ていない。

一部、pythonを使用しコードを書いて文字数カウントしていたが、pythonだと環境が整っていない方もいるので、できるだけアナログで簡易的な方法でやってみた。

私も以前PCにpythonを入れたけれど、全く使えないのでいつの日にか勉強して使えるようになりたい。

また、これより簡単で優れた方法もあると思うので、もしあれば教えていただきたい。

なお、この手順はPCでのもの。
スマホでも別の方法で出来るかもしれない。



◆手順(エクスポート~メモ帳へ出力)


note>自分の記事>エクスポート

「エクスポート」を押すと、
確認画面が表示される。

そして「エクスポート開始」を押すと、
メールで通知しますという表示が出る。

少し待つと、登録しているメールへ通知が来る。

メール画面から遷移すると、
ダウンロードページへのリンクが出来ている。

そのページからダウンロードをすると、
「assets」フォルダ
・「note-ID.xml」ファイル
この2つが出来ている。

assetsフォルダの中身は画像が入っている。

今回文字数を計測するので、
画像は不要。

なので、もう一方の.xmlのファイルを開いてみる。
この時点で嫌な予感がした。

なぜなら、.txtかと思っていたが、
.xmlという未知の拡張子だったから。
これ開くのにも面倒なんだろうなと感じた。

メモ帳(サクラエディタ)で開いた。
タグと文字と日付みたいなものが混在している。
文字以外のものを全て削除しなければならない。

この時点での文字数は649,763字



◆手順(ChatGPTで確認)


私はすぐに「置換」をし、
余計なものを全部取り除こうとした。

メモ帳で置換ができるのか?
エクセルに一回出力し、そこから置換?

少しだけ思い当たるのを色々いじってみたが、
なんだかよくわからない。

しかもエクセルに吐き出すと、
.xmlのせいか文字コードのせいか
わからないが文字化けする。

まあでも今回は文字数をカウントするので、
文字化けは関係ないと思われるけれど。

ネットでも手順がうまく調べられない。

しかし、私にはChatGPT先生という
心強い味方がいたのだ。

こういう時に、
より簡単な方法を調べてくれるのが生成AI。

#プロンプト
「.xml」形式で文字とタグが混在している文章です。 その中から、全てのタグを削除して、 文字数のみをカウントする方法を教えてください。
#条件 今は「.xml」形式となっていますが、他の形式に変換しても構いません。 より簡易的な方法

方法1: テキストエディタを使用する
・VS Codeを使用する方法:
XMLファイルを開きます。
正規表現を利用してタグを削除します。
`Ctrl + H`で検索と置換ウィンドウを開きます。
検索欄に`<[^>]+>`と入力し、置換欄は空白にします。
正規表現を有効にして(.*というアイコンをクリック)、すべてを置換します。
タグが削除された後、ステータスバーに表示される文字数を確認できます。

・Notepad++を使用する方法:
XMLファイルを開きます。
`Ctrl + H`で検索と置換ダイアログを開きます。
検索モードを「正規表現」に設定し、検索欄に`<[^>]+>`と入力、置換欄を空白にします。
「すべて置換」をクリックしてタグを削除します。
`Ctrl + A`で全選択して、ステータスバーに表示される文字数を確認します。

方法2: プログラムを使用する
Pythonのスクリプトを使うことで、タグを削除して文字数をカウントすることも簡単にできます

import re # XMLの内容を読み込み xml_content = """ <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> """ # タグを削除 text_only = re.sub(r'<[^>]+>', '', xml_content) # 文字数をカウント character_count = len(text_only) print(f"文字数: {character_count}")

方法3: オンラインツールを使用する
オンラインで利用できる「XML to Text」や「HTMLタグ削除ツール」を使用して、タグを削除し、その後、文字数カウンターを利用して文字数を確認することもできます。

まとめ
最も簡単な方法は、テキストエディタを使用して正規表現でタグを削除し、文字数をカウントする方法です。プログラミングに慣れている場合は、Pythonスクリプトを使う方法も効果的です。

ツールを使いたくないから、
方法1が一番とっつきやすい。

VSCodeとNotepad++どちらでもよかったが、
今回はVSCodeを利用することにした。

ではこの出力された手順通りにやってみる。


◆手順(VSCodeでの作業)


・ツールダウンロード

まず、ネット上でVScodeをダウンロードする。
ダウンロードボタンを押し、
すぐに完了した。

※ちなみにこれは全部英語だけれど、学生で仕事をしていない私でもすぐにわかったので、PCで仕事している人や作業している人はすぐに分かると思う。


左上「file」>「openfile」を押すと、
どのファイルを選択するかが出てくる。

ここで先ほどダウンロードした
.xmlのファイルを選択する。

選択をすると、読み込むことができた。
ここから、タグをすべて削除していく。


・タグを削除

VScodeは「置換」をすることができる。
なので置換をしてすべて削除する。

先ほど出力されたものを、
そのまま入れる。

`Ctrl + H`で検索と置換ウィンドウを開きます。
検索欄に`<[^>]+>`と入力し、置換欄は空白にします。
正規表現を有効にして(.*というアイコンをクリック)、すべてを置換します。

置換元に入力すると、
該当するモノがすべてオレンジ色になった。

これが削除される「タグ」である。
とても分かりやすい。
これをすべて削除する。

見事にタグがすべて無くなった。
これで文字数だけになったと思うが、
さらにURL日付の塊が出力されている。


・URLを削除する

次にURLをすべて削除する。
再びChatGPT先生に聞く。

#プロンプト
方法1のVScodeでタグはすべて削除しました
次に、URLを全て削除する方法

VS Codeでタグを削除した後、XML内のURLを削除する方法は以下の通りです。

### 方法1: 正規表現を使ってURLを削除する
1. **URLの形式を確認する**
URLの形式が`http://`や`https://`で始まる場合が一般的です。この場合、正規表現を使ってURLを削除できます。

2. **検索と置換を開く**
`Ctrl + H`を押して、検索と置換ウィンドウを開きます。

3. **正規表現を入力する**
検索欄に以下の正規表現を入力します。

``` https?://[^\s]+```

- `https?`: `http`または`https`にマッチ。
- `://`: スラッシュの前後のコロンと2つのスラッシュにマッチ。
- `[^\s]+`: 空白以外の文字が1つ以上連続する部分にマッチ。

また、場合によってはURLがドメイン名で終わらず、クエリパラメータやパスが含まれる場合があるため、行末までのURLを削除したい場合は以下の正規表現を使います。

```https?://[^\s"]+```

- `"`が含まれている場合には、クエリパラメータや他の構造が含まれる場合でも対応できます。

4. **置換欄を空欄に**
置換欄を空欄にして、すべて置換をクリックします。

5. **URLが削除されます**
これで、文中のすべてのURLが削除されます。

### 注意点
- 正規表現は一般的なURL形式を想定していますが、特殊な形式や非常に短いURL、ドメイン名のみのURLが含まれている場合には追加の調整が必要になる場合があります。
- URLの前後にスペースが残る場合がありますが、文書の整形が必要であればそれも合わせて調整します。

これで、XMLからタグだけでなく、URLもすべて削除できます。

2つの正規表現での入力が出てきたが、
なんとなく後者を使用した。

```https?://[^\s"]+```
- `"`が含まれている場合には、クエリパラメータや他の構造が含まれる場合でも対応できます。

これで置換し、
無事「タグ」と「URL」は削除完了した。

では最後に「日付」を全て削除する。


・日付を削除する

再びChatGPT先生に聞く。

日付の塊に関しては一見全部バラバラに感じるけれど、なんか規則性があるので、その規則を2つほどプロンプトに打ち込む。

#プロンプト
URLもすべて削除成功しました 次にJun 2024 21:51:02 +0900000 22 Jun 2024 05:25:50 +0900000この形式のものが混在しています。 これを削除してください

この形式の文字列を削除するために、正規表現を少し調整します。以下の手順に従ってください。

### 手順
1. **VS Codeで検索と置換を開く**
- `Ctrl + H`を押して、検索と置換ウィンドウを開きます。

2. **正規表現を入力する**
- 検索欄に以下の正規表現を入力します。

```regex
\d{2}\s\w{3}\s\d{4}\s\d{2}:\d{2}:\d{2}\s\+\d{7}
```

または、月の部分が省略されているパターンを考慮する場合、以下のようにします:

```regex
\b(?:\d{2}\s)?\w{3}\s\d{4}\s\d{2}:\d{2}:\d{2}\s\+\d{7}\b
```

- `\d{2}\s`: 日付部分(22のような2桁の数字とその後のスペース)にマッチ。省略可能なので`(?:\d{2}\s)?`のようにすることもできます。
- `\w{3}`: 月を表す3文字のアルファベット(Junなど)にマッチ。
- `\d{4}`: 4桁の年にマッチ。
- `\d{2}:\d{2}:\d{2}`: 時刻形式(HH:MM:SS)にマッチ。
- `\+\d{7}`: タイムゾーンオフセットに続く7桁の数字にマッチ。

3. **置換欄を空欄に**
- 置換欄を空欄にして、すべて置換をクリックします。

4. **形式に該当する文字列が削除されます**

### 注意点
- この正規表現は、指定された形式に厳密に一致する場合に動作します。実際のデータが少し異なる場合には、正規表現の調整が必要です。
- 各パターンが適切に認識されていることを確認してから、置換を実行してください。

これで、指定された形式の文字列をすべて削除できるはずです。

2つの正規表現が出てきたので、
今回は出力された2つを置換した。


すべて置換を押すと、完了。

これで「タグ」「URL」「日付」を削除し、
文字だけが残った。

最後に全選択(ctrl+A)し、
最下部の文字数を確認して完了。


◆問題点


この文字数は「下書き」や「予約投稿」が含まれる。
「公開中のみ」を絞って出力することはできない。

しかし、今現時点で書き上げた文字数
という意味では、
未公開分もすべて含むのは間違いではないと思う。


◆まとめ


エクスポート
→VScodeで読み込み
→置換でタグ、URL、日付を削除
→文字数確認し完了

タイトルや細かい記号が入ったままなので、
正確な文字数をするには、もう一手間必要。

しかしここからさらに手間加えるのであれば、
もうpythonをインストールし、
コードをコピーして処理した方が良い。


◆あとがき


ここまでの記事
-----
期間:67日
合計文字数:53,230字
合計記事数:114記事(公開中104記事)
-----

文字数が意外に少なかった。
「タイトル」や「■」や「つづく。」
が入ってしまっているので、
これでもまだ少し多い。

それも考慮すると、
大体52,000~53,000字前後
と言ったところ。

月平均26,000字くらい書いているので、
1年続ければ312,000字(26,000*12)

これくらい書けば、
少しは文章がうまくなるのかもしれない。



つづく。


■noteについてのアレコレはこちら


この記事が参加している募集

このサポートが日々の活力になります♪ 私も、より良い記事を書いていけるように頑張ります!