9

プログラムでJava ドキュメントにアクセスするための API はありますか? Eclipse のようなエディター/IDE が IntelliSense に対して行うことと同様のこと。確かに、javadoc で生成された html は解析してインデックスを作成できますが、何かがスタンドアロン パッケージとして既に存在するかどうかを知ることは素晴らしいことです。

更新: 明確にするために、Java 言語実装のドキュメントにプログラムでアクセスしようとしています。ただし、簡単な方法はありませんが、Oracle のサイトからmake docsopenjdk を取得し、doclet を実行して、非 HTML 形式で出力を取得する必要があります。これは私が最初から避けようとしていたことです。$PLATFORM が解決されず、ソース ビルドが失敗する理由を突き止めようと、すべての Makefile を読んでいます。

私が最終的に解決したこと:

HTML ドキュメントのスクレイピング。うん。それが私の仕事を成し遂げるだろうと気づきました。

import urllib2
import pymongo

mongo = pymongo.Connection('localhost')
mongo_db = mongo['api_db']
mongo_collection = mongo_db['api_collection']

URL='''http://docs.oracle.com/javase/6/docs/api/index-files/index-'''
URL_range = 27+1

def getPageElements(url):
    content=urllib2.urlopen(url).read()
    from BeautifulSoup import BeautifulSoup
    soup = BeautifulSoup(content)
    elements = soup('dl')
    return elements


def savePageElements(elements):
    for i in elements[0]:
            try:
                    entry={'type_description':str(i.findNext('dt')).split('-')[1].split('<')[0]\
                                    +i.findNext('a').findNext('a').renderContents(),\
                                    'signature':i.findNext('a').findNext('a').renderContents()+i.findNext('b').renderContents(),\
                                    'description': i.findNext('dd').renderContents()\
                            }   
                    print entry
                    insert_id = mongo_collection.save(entry)
            except:
                    pass


def retrieve(str):
     mongo_documents = mongo_collection.find({
    'signature': str,
    #'type_description':"Method of java.io.PrintStream"
    })  
    for this_document in mongo_documents:
        print this_document


if __name__=="__main__":
    for i in range(1,URL_range):
            #url=URL+str(i)+".html"
            #print "Processing:", url
            #elements=getPageElements(url)
            #print elements[0]
            #savePageElements(elements)
            retrieve("println(String)")

しかし、dexyを見てください。問題なく Ubuntu で OpenJDK をビルドできた場合は、再生に適した JSON が生成されたはずです。

4

3 に答える 3

2

あなたが書いているように、Eclipseはjavadocを解析し、それをかなりうまく処理します。3.2M4で導入されたようです。Eclipse ソースから機能を抽出できる場合があります。Eclipse コミュニティーでエントリー・ポイントを確認することから始めるのがよいでしょう。

それがうまくいかない場合、あなたの出発点はプレーンなバニラ HTML パーサーになると思います。

于 2012-10-12T23:46:11.067 に答える
1

javadoc ツールは、Java ファイルから情報を解析し、ドックレットに委任して、この構造化された情報をドキュメントに変換します。標準のドックレットは使い慣れた HTML 出力を生成しますが、独自のドックレットを作成して、代わりにそれを使用するように javadoc に指示することもできます。元のソース コードが利用可能な場合、これはおそらく最も堅牢なオプションです。

于 2012-10-14T15:39:23.173 に答える
0
  • JavaDoc ツールの出力を使用して、この例のようにXML として解析できます。
  • Doxygenなどの他のドキュメント抽出ツールを使用して、それらの (より優れた) XML 出力を解析することもできます。
  • 基本的なパーサーの知識があれば、JavaDoc-extractor を自作できます。良い出発点となる無料の Java パーサーがたくさんあります。(これがあなたの研究プロトタイプにとって最良の方法だと思います)。
于 2012-10-14T13:50:31.070 に答える