1

これが難しいものです:

画面上で単語の位置とサイズ(フレーム)を見つけることができる必要があります(最初の出現で十分です。そこから次の単語を取得できるはずです)。

たとえば、Word、Excel、PowerPoint for Mac、およびSafariなどで単語の位置を検出できるようにしたいと考えています。

解決策は可能な限り高速である必要があります。1秒あたり少なくとも5〜6語を見つけて、CPU時間をできるだけ少なくすることができるはずです。

これが私がこれまでに考えたことです:

  • ウィンドウのスクリーンショット/グラフィックスコンテキストでのOCR(Mac OS X 10.4で動作し、商用製品で使用できる優れたオープンソースフレームワークはありますか?)。Evernoteは、画像内の単語を見つけるのに非常に優れています。カスタムの社内エンジンを使用しているのか、オープンソース/商用エンジンを使用しているのかはわかりませんが、これが「有効な」ソリューションである場合は、それを使用したいと思います。理想的には、アクティブなアプリケーションのウィンドウで単語のフレームを検出します(別のアプリケーションのフレームを取得する方法は?)。
  • クォーツによるテキストの描画に何らかの「フック」をかけ、描画されたときに単語の位置を傍受します(一見するとあまり実現可能ではないようです!)。
  • AppleScriptですが、それはアプリケーションが提供するAPIに大きく依存し(私が見たものからWord文書で単語の座標を取得できるとは思いません)、遅いです。
  • ...アイデアから..。

私の目標は、段落のテキストを含む文字列に基づいて、段落内のすべての単語のフレームを正しい順序で取得することです。

ヒントを事前に感謝します!

4

2 に答える 2

2

出発点として、QuickCursorのコードを確認することをお勧めします。AXAccessibilityAPIを介してさまざまなアプリケーションからテキストを取得します。これで、単語のピクセル配置は取得されませんが、少なくともそのUI要素のテキストに関連付けられたNSStringが返されます。もちろん、これは問題のアプリがこれらのAPIをサポートする必要があることを意味します。MSOfficeスイートがそうするかどうかはわかりません。さらに、編集可能な要素のみをサポートしているため、Safariで編集できないWebページも機能しません。しかし、それはあなたにいくつかのアイデアの出発点を与えるかもしれません。

を見てからQCUIElement.{m,h}QCAppDelegate.mbeginQuickCursorEdit:)の実装...彼の抽象化されたQCUIElementの実装は次のように単純なようです。

QCUIElement *focusedElement = [QCUIElement focusedElement];
id value = focusedElement.value;

編集:ああ!アクセシビリティインスペクタのサンプルコードであるUIElementInspectorを確認してください。実際には、ページ上の要素のAXPositionを取得できます。今、それは一言一句ではありませんが、私たちは近づいています。テキストブロックのx、y配置、およびテキストブロックに含まれる単語が表示されます。

于 2009-10-30T21:40:39.730 に答える
1

これは可能ですが、確実に機能させるのは非常に困難です。スペルキャッチャーのダイレクトコネクト機能を試して、例を見ることができます。

于 2009-10-30T23:48:27.700 に答える