投稿

ラベル(C#)が付いた投稿を表示しています

Project AnalyzerがPowerPointに対応!さらにOfficeファイル内の画像からテキストを抽出するOCR機能を追加!

【アップデート】Project AnalyzerがPowerPointに対応!さらにOfficeファイル内の画像からテキストを抽出するOCR機能を追加! こんにちは!AIにプロジェクトの全貌を読み込ませるためのツール「 Project Analyzer 」をアップデートしました。 (前回の記事: AIにプロジェクトを読ませる「Project Analyzer」がNotebookLMに完全対応&ファイル個別出力も可能に! ) 前回のNotebookLM向け最適化に続き、今回は ドキュメント解析の精度と対象範囲を大きく広げる 機能追加を行いました。特に開発現場でよく使われるOfficeファイルへの対応を強化しています! 🚀 今回のアップデート内容(新機能) 1. PowerPoint(.pptx)ファイルの解析に正式対応 これまでExcelやWordの読み込みには対応していましたが、今回新たに PowerPointファイル(.pptx)からのテキスト抽出に対応 しました。 要件定義書やシステム概要図、プレゼン資料など、PowerPointで作成されたドキュメントも、AIが読み込みやすいマークダウン形式として出力できるようになります。 2. Officeファイル内の画像に対するOCR(光学文字認識)対応 Excel、Word、そして今回追加されたPowerPointファイルの中に 「画面キャプチャ」や「画像化された図表」 が貼り付けられていることはないでしょうか? これまでのテキスト抽出では画像内の文字は取得できませんでしたが、今回のアップデートで OCR機能を搭載 しました! 💡 OCR機能のメリット ドキュメントに貼り付けられたエラー画面のキャプチャや、スクショベースの手順書などからテキストを自動抽出し、マークダウンの出力結果に含めることができます。これにより、テキスト化されていなかった情報までAIに連携可能になります。 ⚠...

AIにプロジェクトを読ませる「Project Analyzer」がNotebookLMに完全対応&ファイル個別出力も可能に!

【アップデート】AIにプロジェクトを読ませる「Project Analyzer」がNotebookLMに完全対応&ファイル個別出力も可能に! こんにちは!AIツールにプロジェクトをまるごと読み込ませるための自作ライブラリ 「Project Analyzer」 のアップデート情報です。 (前回の記事: AIにプロジェクトを読ませる「Project Analyzer」がExcel/Wordファイルに対応!設計書も丸ごとMarkdown化 ) 私自身、このツールを使ってGoogleの「NotebookLM」などにソースコードを読み込ませて日々活用しているのですが、実際に使っている中で 「AIが一部のコードを正しく解釈してくれない」「回答の参照元ファイルが分かりづらい」 といった課題が見えてきました。 そこで今回は、より快適にAIと対話できるように ファイルごとの個別出力機能 を追加し、さらにNotebookLM特有の 読み込みエラー(パース失敗)を解消する不具合修正 を行いました! 🚀 新機能:ファイルごとのMarkdown出力に対応! これまでProject Analyzerは、AIに一度に渡しやすくするため、プロジェクト全体の全ファイルを「1つの巨大なMarkdownファイル」にまとめて出力していました。 しかし、NotebookLMで処理した際、AIが回答の根拠として提示する「参照元情報」をクリックしても、 1つの巨大なファイルが開くだけで、実際にはどのクラスやファイルを参照したのかが非常に確認しづらい という問題がありました。 そこで、新しく 「ファイルごとにMarkdownを出力する機能(オプション)」 を追加しました! このオプション(CLIでは --per-file )を有効にすると、 01_ProjectContexts フォルダ内に、元のフォルダ構成を維持したまま Hoge.cs.md のように個別のファイルとして出力されます。 これにより、...

AIにプロジェクトを読ませる「Project Analyzer」がExcel/Wordファイルに対応!設計書も丸ごとMarkdown化

AIにプロジェクトを読ませる「Project Analyzer」がExcel/Wordファイルに対応!設計書も丸ごとMarkdown化 こんにちは!以前、ChatGPTやNotebookLMなどのAIツールに、複数ファイルからなるプロジェクトをまるごと読み込ませるための自作ライブラリ 「Project Analyzer」 をNuGetで公開しました。 (前回の記事: AIにソースコードを読ませるのが超快適に!プロジェクトをMarkdown化する自作ライブラリをNuGetで初公開しました ) AIにソースコード全体とフォルダ構成を「1つのMarkdown形式」にまとめて渡せるツールとして、私自身も日々活用しているのですが、実際の開発現場で使っていると 「ソースコードだけじゃなくて、設計書も一緒に読ませたい!」 という場面が頻繁に出てきました。 そこで今回、Project Analyzerを大幅にアップデートし、 ExcelファイルやWordファイルの解析にも対応 しました!さらに、細かい不具合修正や便利なオプションも追加しています。 🚀 アップデートの目玉機能 1. Excel / Word ファイルからのテキスト抽出に対応! これまでProject Analyzerは、主に .cs や .js などのテキストファイル(ソースコード)の読み込みに特化していました。 しかし、実際の業務では 「Excelで書かれたテーブル定義書」 や 「Wordで書かれた要件定義書」 がプロジェクトフォルダ内に混在していることも少なくありません。 今回のアップデートで、 .xlsx 、 .xls 、 .xlsm 、 .docx 形式のファイルを自動的に検知し、ファイル内のテキストをAIが読みやすい形式に変換してMarkdownに含めることができるようになりました。 Excelファイル: シートごとにデータを読み込み、AIが解釈しやすいようにカンマ区切り(CSV風)のテキストに変換し...

AIにソースコードを読ませるのが超快適に!プロジェクトをMarkdown化する自作ライブラリをNuGetで初公開しました

AIにソースコードを読ませるのが超快適に!プロジェクトをMarkdown化する自作ライブラリをNuGetで初公開しました 最近、ChatGPTやClaude、NotebookLMなどのAIツールに、自分が書いているソースコードを読み込ませて「このバグの原因は?」「この機能をリファクタリングして」とお願いすることが増えましたよね。 でも、複数のファイルにまたがるプロジェクトをAIに渡すとき、 「一つ一つのファイルを開いてコピペする」 のが地味に面倒ではありませんか? さらに、AIにシステム全体の文脈を理解してもらうには、「ファイルの中身」だけでなく「フォルダ構成(ディレクトリツリー)」も一緒に教えたいところです。 そんな手間を自動化して、プロジェクト全体をAIが読みやすい「1つのMarkdown形式」にシュッとまとめてくれるC#ライブラリ、 「Project Analyzer」 を自作しました! さらに今回は、このライブラリを 自身初のNuGetパッケージとして一般公開 してみたので、その機能と公開してみた感想をご紹介します。 Project Analyzer とは? Project Analyzer は、指定されたプロジェクトフォルダやGitHubリポジトリの構造と内容を分析し、AI (LLM) のコンテキストとして利用しやすいようにMarkdownとして出力・取得できる.NET製のライブラリです。 主な機能 📁 フォルダツリーの生成: プロジェクトの階層構造をツリー形式のテキストで出力します。 📄 統合されたコンテキストの生成: プロジェクト内の全ソースファイルを、シンタックスハイライトや相対パス付きのMarkdownに集約します。 🐙 GitHubリポジトリの直接分析: ローカルフォルダだけでなく、GitHubのリポジトリURLを指定するだけで、自動でクローンして分析してくれます。 ⚙️ 柔軟な除外設定: .pr...

【自作ツール】プロジェクトをNotebookLMのソースに

プロジェクトをNotebookLMのソースに 【自作ツール】プロジェクトをNotebookLMのソースに 最近話題のAIノートアプリ「 NotebookLM 」は本当に便利です。ドキュメントを読み込ませるだけで、内容の要約や質疑応答ができてしまう優れものです。 これを「自作プログラムのソースコード分析にも使いたい!」と考えたことがある開発者の方も多いのではないでしょうか?しかし、ここに一つ大きな壁があります。 NotebookLMはソースコードをそのまま使えない。 NotebookLMは非常に優秀ですが、残念ながらC#やJavaなどのソースコードファイル(.csや.javaなど)を直接アップロードして分析することはできません。そのため、一度マークダウン形式に手作業でコピペする。。などの手間が発生してしまいます。これではせっかくの効率化ツールも宝の持ち腐れです。 GitHubのプライベートリポジトリは使えない 「GitHubリポジトリを連携させれば良いのでは?」と思うかもしれません。確かにその方法もありますが、連携できるのはパブリックリポジトリ(公開リポジトリ)のみです。 つまり、「まだ公開していない開発中のプロジェクト」や「ローカルのプロジェクトファイル」などは、対象外になってしまいます。 そこで、そういった課題に対応できる「 ProjectAnalyzer 」を開発しました。 もちろん、公開リポジトリであれば uithub などのオンラインツールを使うこともできますが、ローカルプロジェクトには対応できません。だからこそローカルで動作するこのツールを開発しました。 ProjectAnalyzer ProjectAnalyzer 」を開発しました。 ...

MacOSと.Net MAUIでAndroid15をビルドする

MacOSと.Net MAUIでAndroid15をビルドする MacOSと.Net MAUIでAndroid15をビルドする .Net MAUI でアプリを作っている人は少数だと思うんですよね。。なのでこんな悩みをしている人は少ないかと思いますが、誰かの参考になれば。。 .Netと言えばWindowsでしたが、 Visual Studio for Mac があったので、Macユーザーでも.Netの開発ができていました。 しかし、Visual Studio for Macは2024/8/31に廃止になり、 VSCode にextensionを導入する形での開発スタイルに。。。 これにより、今まではVisual Studioで一括管理できていたSDKなどが、個別管理になってしまいパスの通し直しなどが発生しました。 これから.Net MAUIの環境を構築する人には関係ないものですが、今まで Visual Studio で構築していた人は新しく Android Studio をインストールし、SDKをインストールします。 ここで問題なのが、Visual StudioにおけるAndroidSDKの格納先は下記で、 $Home/Library/Developer/Xamarin/android-sdk-macosx/platforms Android StudioのAndroidSDKの格納先は下記のため、格納場所が異なります。 $HOME/Library/Android/sdk そのため、Android Studio経由でSDKをダウンロードをすると、Pathを更新しない限りはVSCodeでビルドしようとするとエラーになります。 ダウンロードが完了したら、下記コマンドを実行します。これでビルドする際に、Android StudioでダウンロードしたSDKを利用することができます。 Sudo dotnet build -t:...

.Net MauiでAndroidのEdgeToEdgeに対応する

イメージ
.Net MauiでAndroidのEdgeToEdgeに対応する .Net MauiでAndroidのEdgeToEdgeに対応する Androidアプリをリリースしている人であればご存知だと思いますが、アプリを公開しておくためには常に最新OSに対応しておかないといけません。 なので私も最新の Android15 に対応するべく、アプリ改修をしていたのですが、一つ問題が生じました。。 それは、 Android SDK35 でデフォルト設定になった EdgeToEdge です。 EdgeToEdge が有効になることで、端末の時刻などが表示されている画面上部までアプリ内容を表示できるようになる反面、しっかりアプリ側が対応していないとレイアウトの一部が被ってしまい、正常に動作しなくなってしまったります。 特に私は NavigationBar を表示させていることもあり、画面遷移後の戻るボタンが動作しなくなったり、ツールバーが押せなくなったりしてしまいました。 これに対応しないといけないのですが、使用しているフレームワークが .Net MAUI のため情報がほとんどなく苦戦したので対応方法を纏めようと思います。 EdgeToEdgeに対応する 調べていると色々な対応方法が紹介されているのですが、.Net Mauiに対応したものがなく、それっぽく記述しようとしてもコンパイルエラーになりました。 その中で最終的にうまく行った方法を紹介します。 結論として、かなり無理矢理感があり、NavigationBarの表示文字がカメラに被ってしまっているなどの問題もあるのですが、よければ参考にしてください。。 参考にしたサイト: こちら 下記のコードをPlatform/Android配下の MainActivity.cs に転記します。 public class MainAc...

Transcript4netのアップデートについて

Transcript4netのアップデートについて Transcript4netのアップデートについて 以前、Teamsのトランスクリプトについて、発話者や内容を整理するプログラムを紹介しました! dotnetでTeamsのトランスクリプトを活用 今回はこのライブラリをアップデートしたので、追加した機能を紹介していきたいと思います。 よければ実際にライブラリを使ってみてください! なお、もっとこうしたほうが良いなどのご意見があれば宜しくお願いいたします。 Transcript4CSV アップデート内容 それでは、アップデートの内容を紹介していきます。 多くのvttファイルに対応 vttファイルといっても、色々な形式のファイルが存在していることがわかりました。 一般的には前回紹介した例のように vタグ で囲われているものと思っていましたが、実際にはvタグが存在せず行ごとにデータが記されているものも存在しました。 WEBVTT xxxxxxxxxxxxxxxx-xx 00:00.000 --> 00:02.000 よろしくお願いいたします。 xxxxxxxxxxxxxxxx-xx 00:02.000 --> 00:06.000 はい、よろしくお願いします。 このように、1行目が発話時間、2行目は発話者情報、3行目は発話内容となっています。 ※同じTeams内で異なる形式のファイルがダウンロードできてしまうのはどうなのでしょうか。。 他にも、下記のような形式も存在しており、多くのバリエーションに対応する必要が出てきました。。 WEBV...

PythonでC#(dll)を利用する方法

PythonでC#(dll)を利用する方法 PythonでC#(dll)を利用する方法 私は今まで、 C# での開発をする機会が多かったのですが、最近はAI関連のアプリ構築の関係で python を多く使用しています。 Pythonもライブラリが豊富なので、pipでインストールできるライブラリで大半のことができます。 しかし、ニッチなライブラリは自作するなどのしないといけず、 「過去にC#で構築したものが使えればなぁ」 と感じる場面が増えてきました。 そんな中、ふと「確かnumpyってC++で構築されたライブラリって言っていたな」と思い、もしかしたらpythonでdllを利用する方法があるのではないかと思い立ったのです。 そしたらちゃんと方法があったので、今回はこれを紹介していきたいと思います。 pythonnet pythonからdllを呼び出すには pythonnet というライブラリを使うことで実現できます。 ※dllを呼び出すためには、そのSDKも必要になるので注意。(例:.Net6など) 導入方法と使用方法を紹介していきます。 今回は自作ライブラリである Transcript4CSV の呼び出しを例にします。 ライブラリの導入 下記コマンドを実行してライブラリをインストールします。 pip install pythonnet import 下記コードを記述し、ライブラリをコード内で利用できるようにします。 from pythonnet import load load('coreclr') import clr ...

C#(Dotnet)でCSVファイルを扱う

C#(Dotnet)でCSVファイルを扱う C#(Dotnet)でCSVファイルを扱う 以前、 C#でCSVファイルを読み込む にて、 C# (dotnet) で CSVファイル を読み込む方法を紹介していました。 前回からの改良点や、追加した部分を紹介していこうと思います! なおGitには最新のコードやdllを配置しているので、よかったら見てみてください。 「こうするべきでは?」というのがあれば連絡もらえると嬉しいです! ・ https://github.com/flying-YT/CSV4net/tree/master 読み込みクラスの改良点 以前のコードでは値をそのまま配列に格納していましたが、ダブルクォーテーションで囲われている場合はダブルクォーテーションを含めて配列格納していました。 しかし、実際には値はダブルクォーテーションを含まず取り出したいケースがあると思い、囲っているダブルクォーテーションを削除するように仕様変更しています。 具体的な変更点としては、下記配列を格納する部分で正規表現を使っています。 変更前 var strArray = new string[separateList.Count]; foreach (var item in separateList.Select((value, index) => new { value, index })) { strArray[item.index] = item.value; } 変更後 var strArray = new string[separateList.Count]; foreach (var item in separateList.Select((value, index) => new { value, i...

MAUIのiOSアプリで90717が発生する場合

イメージ
MAUIのiOSアプリで90717が発生する場合 MAUIのiOSアプリで90717が発生する場合 MAUI でアプリを構築し、いざ App Store Connect に送信しようとした際に、 90717 のエラーが発生して転送完了しないことがありました。 ネットで解決を方法を検索して、それを試してもうまく行かず、時間をかけすぎたことがあったので、備忘のためにブログに残したいと思います。 解決方法 ネットで解決方法を検索すると、 アプリアイコンの背景が透過 されていると発生するとのこと。 アイコンの元ファイルを確認したところ、透過していたので修正して再度ビルド、転送を実施。 しかし、同じく 90717 が発生して転送できませんでした。 何回かリビルドなどを繰り返してもうまく行かず、検索してもネイティブの情報しか出てこないため四苦八苦していたところ、Githubのissueに同じくMAUIで事象が発生している人を発見。 https://github.com/dotnet/maui/issues/11124#issuecomment-1304723081 上記リンクで回答されているのですが、csprojファイルのアプリアイコン部分の記述に Color を指定するだけでした。 <!-- App Icon --> <MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#000000" /> 「まさかこれだけで解決するなんて」と思っていましたが、colorを指定してビルド、app storeに転送したら無事完了しました! なんと、csprojファイルの指定をするだけだったと...

dotnetでTeamsのトランスクリプトを活用

dotnetでTeamsのトランスクリプトを活用 dotnetでTeamsのトランスクリプトを活用 仕事で Teams を使っている人は多いのではないでしょうか。 その流れでTeams会議を使っている可と思いますが、Teams会議には文字起こし機能「 トランスクリプト 」が存在します。 精度は少々残念ですが、自動的に作成してくれ、かつ話者ごとに分割して表示してくれます。 皆さんはこの トランスクリプト を活用したいと思ったことはないでしょうか。 できればトランスクリプトを議事録の作成に使いたいと思ったことはあると思います。しかし、ダウンロードできる Vttファイル は、そのままではデータ操作しにくいものです。 なので今回私はトランスクリプトを活用するべく、 Vttファイル を CSVファイル に変換し、かつフィラー除去(※)などを行えるライブラリを作成したので、ここで紹介したいと思います。 ※「あ、」や「えっと」などの不要語を取り除くこと 自作ライブラリ紹介 ライブラリはGitにアップしているので、ぜひ活用していただければと思います。(こう処理を変えるとよいなどのアドバイスいただけると嬉しいです。) ・ Transcript4CSV 基本的には使い方は README.md に記載してはいますが、こちらでもざっくり紹介します。 dllをプロジェクトに追加 Gitのリリースからdllをダウンロードしていただき、自分のプロジェクトに追加してください。 usingの追加 呼び出すファイルにusingを追加します。 using Transcript4CSV; ...

MAUIでCS8795が発生するときの解消方法

イメージ
MAUIでCS8795が発生する MAUIでCS8795が発生するときの解消方法 xamarin のサポートが終了を迎えるため、現在 MAUI への移行を進めているのですが、毎度毎度発生する下記のエラーについて対処をまとめたいと思います。 CS8795 部分メソッド ‘XXXXX’ にはアクセシビリティ修飾子が指定されているため、実装部分が必要です。 XamarinのDependencyServiceのように、同じメソッドでプラットフォームごとに処理を分ける方法を実装していると発生します。 Microsoftのページ通り に実装しても、なぜかエラーが発生するのです。。 ちなみにエラーが発生しますが、デバックモードであれば問題なく稼働しますが、リリースビルドをすると止まってしまいます。 これを今回は解消していきます。 ちなみにプラットフォーム別の処理を実装する方法は こちら が参考になります。 対象以外のプラットフォームを取り除く 方法としてはタイトル通りで、対象外のプラットフォームをコンパイル対象から外します。 なお、対象とするプラットフォームにはすべて実装できているものとします。 下記順番に実施していきます。(後半は念のため) プロジェクトのプロパティから取り除く 下記の通りプロジェクトのプロパティから、対象外のプラットフォームのチェックを外します。 .csprojからも取り除く .csprojからも下記のように対象外とするプロジェクトをコメントアウトします。 Platforms配下のフォルダを削除 ここまで...

C#でCSVファイルを読み込む

C#でCSVファイルを読み込む C#でCSVファイルを読み込む 皆さんは CSVファイル を読み込んでデータ処理をするとき、どのようにファイル読み込みを行っていますでしょうか。 通常は下記のようなサンプルを流用し、ファイルを1行ずつ読み込み、 Split関数 などで分割することが多いかと思います。 private static List ReadFile(string path) { List list = new List (); using (StreamReader sr = new StreamReader(path)) { string line = ""; while ((line = sr.ReadLine()) != null) { list.Add(line); } } return list; } しかし、 CSVファイル はカンマ区切りだからといって、 Split関数 で分割してもうまく行かない場合があるのです。 CSVファイルは下記のようにデータ1つ1つをダブルクォーテーションで囲い、この中にカンマが合った場合でもそれを区切り文字としては扱わず1つのデータ(文字列)として扱う場合があります。 "りんご","ぶどう","みかん,もも","かき" こういった場合に、カンマで Split関数 を使用してしまうと、意図しない場所でデータが区切られ、データの整合性が合わなくなることがあります。 なので今回は、1つのデータをダブルクォーテーションで囲ったケースでも正常に読み取れるように自作のクラスを作成していきたいと思います。 独学故、「もっとこうするべき」といった意見があれば是非ご連絡ください! 自作メソッドの作成 ...

C#でログ機能を実装(自作)

イメージ
ログ機能を実装(自作) C#にログ機能を実装(自作) 皆さんはアプリを作成した際に、ログなどを残していますでしょうか。 ログを残すことで、エラーが発生した際などに何が原因だったのか調査しやすかったり、逆に想定通りの挙動をしているか確認することにも使うことができます。 ネットを探せば便利なログ出力のライブラリは多数存在しますが、今回は ログファイルを出力する (作成する)クラスを自作で作成してみたいと思います。 なぜわざわざ自作をするのかですが、別に特別難しい処理を実装するわけではないので、自らコードを書いてみて勉強したいという意図があります。 ログ出力の方法を考える まずはログの出力方法ですが、ざっくり2種類あると思っています。 「 アプリ実行後にログファイルを出力する方法 」と「 継続的に1つのファイルに書き込んでいく方法 」です。 ざっくり上記2つの処理イメージを整理していきます。 アプリ実行後にログファイルを出力する方法 これはstaticのListを用意しておき、メッセージをListに追加していきます。 アプリ処理の最後にListのデータをテキストファイルなどに書き込んで保存します。 この方法のメリットは、アプリの実行ごとにログファイルを作成するので、ファイル名などに処理日時を埋め込んでおけば調査などが容易になります。 デメリットとしては、ちゃんと例外処理などを実装していないとファイル出力処理が実行できずログが確認できない状態になります。 継続的に1つのファイルに書き込んでいく方法 この方法は、書き込むファイルを指定しておくことで処理が行われるたびにファ...

英単語間以外の空白を削除したい(正規表現)

イメージ
英単語間以外の空白を削除したい 英単語間以外の空白を削除したい(正規表現) 最近、スクレイピングで取得していたニュースをもとに文書生成のディープラーニングをできないか検討していてたのですが、テキストデータにある 英単語間以外の空白 が気になりました。 文書生成する際には、連続する○文字をもとに次の文字を予測するような動きになるので、この日本語間の空白がノイズになっているのではないかと。。 単純に半角と全角の空白文字を Replce で除去してしまえばよいかと思いましたが、こうすると英単語間の空白まで削除してしまいます。なので、あくまで下記のパターンのみ削除したいです。 全角文字 + 空白 + 全角文字 全角文字 + 空白 + 半角英字 半角英字 + 空白 + 全角文字 上記パターンに対処するプログラムを取り急ぎ作成したので、まとめておきます。 正規表現の準備 今回は C# でコーディングしていきますが、大半の言語は同じように記載できると思いますので参考にしてみてください。 まずは、先程のパータンを処理するためには、「半角英字」と「それ以外の文字」で分類する必要があります。 逆に言うとそれだけでよいのです! 半角英字 対象となる文字は「a」から「z」と「A」から「Z」です。 これは容易で、「 [a-zA-Z] 」のように記載することでマッチさせることができます。 上記以外の文字 「全角文字」というと複雑な書き方を思い浮かべてしまうかもしれないですが、「それ以外の文字」と記載すれば何となく分かるのではないでしょうか。 ...

C#でVoicevoxのAPIを操作する方法

イメージ
C#でVoicevoxのAPIを操作 C#でVoicevoxのAPIを操作 半年ほど前に話題になった VOICEVOX について、気になったのでインストールして遊んでみた。 普通に使用する場合は、 こちら のリンクに記載のダウンロード方法や使い方を参考にGUIで操作が可能です。 GUI操作の場合は、そこまで使い方に悩むことなく合成音声を作成して遊ぶことが可能です。 ただしかし、GUI操作だと他プログラムから操作することができないので、今回は VOICEVOX を立ち上げると使用できるAPIを活用する方法を紹介します。 なお、今回は私が使い慣れているC#で構築してみます。 下準備 先程APIを利用すると言いましたが、VOICEVOXはexeを起動するとデフォルトでLoaclhostの50021ポートでサーバを立てます。 この状態であれば、localhost:50021宛に通信を行うとレスポンスを得ることができるのです。 ちなみに起動オプションでIPアドレスを指定してあげれば、そのIPアドレスでサーバ起動することができます。 VOICEVOXをダウンロードしたら、下記コマンドをコンソールで実行します。 ※通常は「C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX」にダウンロードされているはず。 C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX\run.exe --host 192.168.0.5 「--host」以降はIPを指定しない場合は不要です。 起動ができたら、ブラウザを立ち上げ下記リンクでアクセスしてみてください。 http://192.168.0.5:50021/docs するとAPI情報を...

ワードクラウドを自作する②

イメージ
ワードクラウドを自作する② ワードクラウドを自作する② 前回 C#でワードクラウドを自作しました。しかし、文字が重なったり、はみ出してしまったりと課題は色々とありました。なので今回は前回出た課題を解決し、より見やすいワードクラウドに改善したいと思います。 前回の画像がこちら 問題は描画する左上の座標のみしか指定していないこと、描画した場所を記録していないため重なる描画をしてしまうことです。そのため。描画する文字が縦横どのくらいの長さになるのか計測することと、描画場所を記録できる仕組みを作る必要があります。 描画する文字列の長さは MeasureStringメソッド を使用し縦横の長さを取得することができるため、このメソッドを利用したいと思います。また、描画場所については2次元配列で管理する方針で進めたいと思います。 なお MeasureStringメソッド を使用するためには、一度Graphicsに描画するため、計測用のGraphicsを用意します。 文字がはみ出さないようにする まずは、「文字がはみ出す問題」を解決したいと思います。 文字がはみ出してしまう原因は、描画する文字列のx座標とy座標の終了値が生成する画像の右のx座標と下のy座標を超えてしまっていることです。 なので描画する前に、描画予定の文字列の長さを取得し右上と左下の座標が描画範囲に収まっていることを確認します。そのうえで描画可能であれば文字列の描画を行います。 コードで実現すると以下のようになります。(長さを取得するために描画するBitmap(demoG)を用意しています。) var size2 = demoG.MeasureString(str, fontData); if(height <= size2.Height+y ) { return false; // 描画できないのでfalseを返す } else if(width <=...