そのため、python sklearnライブラリを使用して簡単なアプリケーションを作成しています。sklearn estimator モデルのいずれかの docstring を解析する必要があります。私は reSTRuctured テキストに精通していませんが、sklearn の「Contributing documentation」ページからのいくつかの簡単な調査では、これらの docstring が reSTRuctured テキスト形式であることを示唆しているようです。この質問に続いて、次のことを試しました(例としてサポートベクター分類器SVCを使用)
from sklearn.svm import SVC
from docutils.core import publish_string
print(publish_string(SVC.__doc__, writer_name='html'))
それを必要とする人にとって、生のdocstringは
)\n アルゴリズムで使用するカーネル タイプを指定します。\n 'linear'、'poly'、'rbf'、'sigmoid'、'precomputed'、または\n callable のいずれかである必要があります。\n ない場合与えられた場合、'rbf' が使用されます。callable が与えられた場合、\n カーネル行列を事前計算するために使用されます。\n\n degree : int、オプション (デフォルト = 3)\n 多項式カーネル関数 ('poly') の次数。\n 他のすべてによって無視されます。カーネル。\n\n ガンマ : float、オプション (デフォルト = 0.0)\n 'rbf'、'poly'、'sigmoid' のカーネル係数。\n ガンマが 0.0 の場合、代わりに 1/n_features が使用されます。\n \n coef0 : float、オプション (デフォルト = 0.0)\n カーネル関数の独立項。\n 'poly' と 'sigmoid' でのみ意味があります。\n\n 確率: ブール値、オプション (デフォルト = False)\n 確率推定を有効にするかどうか。これは `fit` を呼び出す前に \n 有効にする必要があり、メソッドの速度が低下します。\n\n 縮小: ブール値、オプション (デフォルト = True)\n 縮小ヒューリスティックを使用するかどうか。\n\n tol : float 、オプション (デフォルト = 1e-3)\n 基準を停止するための許容値。\n\n cache_size : float、オプション\n カーネル キャッシュのサイズを指定します (MB 単位)\n\n class_weight : {dict, 'auto' }、オプション\n クラス i のパラメータ C を SVC の class_weight[i]*C に\n 設定します。指定しない場合、すべてのクラスの重みは\n1 になります。'auto' モードは y の値を使用して、\nクラスの頻度に反比例する\n重みを自動的に調整します。\n\n verbose : bool、デフォルト: False\n 詳細出力を有効にします。この設定は、\n libsvm のプロセスごとのランタイム設定を利用することに注意してください。\nこれを有効にすると、\nマルチスレッド コンテキストでは正しく動作しない可能性があります。\n\n max_iter : int、オプション (デフォルト = -1)\nソルバー内の反復に対するハード リミット、または制限なしの場合は -1。\n\n random_state : int シード、RandomState インスタンス、または None (デフォルト)\n データをシャッフルするときに使用する疑似乱数ジェネレータのシード\n確率推定。\n\n 属性\n ----------\n `support_` : 配列のような形状 = [n_SV]\n サポート ベクターのインデックス。\n\n `support_vectors_` :配列のような、形状 = [n_SV, n_features]\n サポート ベクター。\n\n `n_support_` : 配列のような、dtype=int32、形状 = [n_class]\n 各クラスのサポート ベクターの数。\n\ n `dual_coef_` : array, shape = [n_class-1, n_SV]\n 決定関数のサポート ベクターの係数。マルチクラスの場合、すべての 1 対 1 分類器の係数。マルチクラスの場合の係数のレイアウトは、多少複雑です。詳細については、ユーザー ガイドの SVM セクションにあるマルチクラス分類に関するセクションを参照してください。\n\n `coef_` : array, shape = [n_class-1, n_features]\n 特徴に割り当てられた重み\n 問題)。これは、線形カーネルの場合にのみ使用できます。\n\n `coef_` は、`dual_coef_` および\n `support_vectors_` から派生した読み取り専用プロパティです\n\n `intercept_` : 配列、形状 = [n_class * (n_class- 1) / 2]\n 決定関数の定数。\n\n 例\n --------\n >>> numpy を np としてインポート\n >>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])\n >>> y = np.array([1, 1, 2, 2])\n >>> sklearn.svm から SVC をインポート\n >>> clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC( C=1.0、cache_size=200、class_weight=なし、coef0=0.0、次数=3、\n ガンマ=0.0、kernel='rbf'、max_iter=-1、probability=False、\n random_state=なし、縮小=True , tol=0.001, verbose=False)\n >>> print(clf.predict([[-0.8, -1]]))\n [1]\n\n 参照\n ------ --\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン。\n\n LinearSVC\n 分類用のスケーラブルな線形サポート ベクター マシンは、\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " [-2, -1], [1, 1], [2, 1]])\n >>> y = np.array([1, 1, 2, 2])\n >>> sklearn から。 svm import SVC\n >>> clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0 、次数=3、\n ガンマ=0.0、カーネル='rbf'、max_iter=-1、確率=False、\n random_state=なし、縮小=True、tol=0.001、verbose=False)\n >>> 印刷(clf.predict([[-0.8, -1]]))\n [1]\n\n 参照\n --------\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン.\n\n LinearSVC\n 分類用のスケーラブルな線形サポート ベクター マシンは、\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " [-2, -1], [1, 1], [2, 1]])\n >>> y = np.array([1, 1, 2, 2])\n >>> sklearn から。 svm import SVC\n >>> clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0 、次数=3、\n ガンマ=0.0、カーネル='rbf'、max_iter=-1、確率=False、\n random_state=なし、縮小=True、tol=0.001、verbose=False)\n >>> 印刷(clf.predict([[-0.8, -1]]))\n [1]\n\n 参照\n --------\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン.\n\n LinearSVC\n 分類用のスケーラブルな線形サポート ベクター マシンは、\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " y = np.array([1, 1, 2, 2])\n >>> sklearn.svm から SVC をインポート\n >>> clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,\n gamma=0.0, kernel='rbf', max_iter=-1, probability=False, \n random_state=None、縮小=True、tol=0.001、verbose=False)\n >>> print(clf.predict([[-0.8, -1]]))\n [1]\n\n を参照また\n --------\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン。\n\n LinearSVC\n liblinear を使用して実装された\n分類用のスケーラブルな線形サポート ベクター マシン。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " y = np.array([1, 1, 2, 2])\n >>> sklearn.svm から SVC をインポート\n >>> clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,\n gamma=0.0, kernel='rbf', max_iter=-1, probability=False, \n random_state=None、縮小=True、tol=0.001、verbose=False)\n >>> print(clf.predict([[-0.8, -1]]))\n [1]\n\n を参照また\n --------\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン。\n\n LinearSVC\n liblinear を使用して実装された\n分類用のスケーラブルな線形サポート ベクター マシン。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,\n ガンマ=0.0、kernel='rbf'、max_iter=-1、probability=False、\n random_state=None、縮小=True、tol=0.001、verbose=False)\n >>> print(clf.predict([[- 0.8, -1]]))\n [1]\n\n 参照\n --------\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン。\n\n LinearSVC\n liblinear を使用して実装された\n分類用のスケーラブルな線形サポート ベクター マシン。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " clf = SVC()\n >>> clf.fit(X, y) #doctest: +NORMALIZE_WHITESPACE\n SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,\n ガンマ=0.0、kernel='rbf'、max_iter=-1、probability=False、\n random_state=None、縮小=True、tol=0.001、verbose=False)\n >>> print(clf.predict([[- 0.8, -1]]))\n [1]\n\n 参照\n --------\n SVR\n libsvm を使用して実装された回帰用のサポート ベクター マシン。\n\n LinearSVC\n liblinear を使用して実装された\n分類用のスケーラブルな線形サポート ベクター マシン。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " rbf'、max_iter=-1、確率=False、\n random_state=なし、縮小=True、tol=0.001、verbose=False)\n >>> print(clf.predict([[-0.8, -1]] ))\n [1]\n\n 参照\n --------\n SVR\n libsvm を使用して実装された回帰のサポート ベクター マシン。\n\n LinearSVC\n スケーラブルな線形サポート ベクター マシン分類は\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " rbf'、max_iter=-1、確率=False、\n random_state=なし、縮小=True、tol=0.001、verbose=False)\n >>> print(clf.predict([[-0.8, -1]] ))\n [1]\n\n 参照\n --------\n SVR\n libsvm を使用して実装された回帰のサポート ベクター マシン。\n\n LinearSVC\n スケーラブルな線形サポート ベクター マシン分類は\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " \n\n LinearSVC\n 分類用のスケーラブルな線形サポート ベクター マシンは、\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n " \n\n LinearSVC\n 分類用のスケーラブルな線形サポート ベクター マシンは、\n liblinear を使用して実装されています。比較要素の詳細については、\n LinearSVC の「関連項目」セクションを確認してください。\n\n "
ただし、パーサーエラーが発生します
<string>:9: (ERROR/3) Unknown interpreted text role "ref".
<string>:17: (SEVERE/4) Unexpected section title.
Parameters
----------
Traceback (most recent call last):
File "<ipython-input-22-2ceadc2dc730>", line 1, in <module>
publish_string(SVC.__doc__)
File "C:\Anaconda3\lib\site-packages\docutils\core.py", line 414, in publish_string
enable_exit_status=enable_exit_status)
File "C:\Anaconda3\lib\site-packages\docutils\core.py", line 662, in publish_programmatically
output = pub.publish(enable_exit_status=enable_exit_status)
File "C:\Anaconda3\lib\site-packages\docutils\core.py", line 217, in publish
self.settings)
File "C:\Anaconda3\lib\site-packages\docutils\readers\__init__.py", line 72, in read
self.parse()
File "C:\Anaconda3\lib\site-packages\docutils\readers\__init__.py", line 78, in parse
self.parser.parse(self.input, document)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\__init__.py", line 172, in parse
self.statemachine.run(inputlines, document, inliner=self.inliner)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\states.py", line 170, in run
input_source=document['source'])
File "C:\Anaconda3\lib\site-packages\docutils\statemachine.py", line 239, in run
context, state, transitions)
File "C:\Anaconda3\lib\site-packages\docutils\statemachine.py", line 460, in check_line
return method(match, context, next_state)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\states.py", line 1135, in indent
elements = self.block_quote(indented, line_offset)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\states.py", line 1150, in block_quote
self.nested_parse(blockquote_lines, line_offset, blockquote)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\states.py", line 282, in nested_parse
node=node, match_titles=match_titles)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\states.py", line 195, in run
results = StateMachineWS.run(self, input_lines, input_offset)
File "C:\Anaconda3\lib\site-packages\docutils\statemachine.py", line 239, in run
context, state, transitions)
File "C:\Anaconda3\lib\site-packages\docutils\statemachine.py", line 460, in check_line
return method(match, context, next_state)
File "C:\Anaconda3\lib\site-packages\docutils\parsers\rst\states.py", line 2720, in underline
source=src, line=srcline)
File "C:\Anaconda3\lib\site-packages\docutils\utils\__init__.py", line 235, in severe
return self.system_message(self.SEVERE_LEVEL, *args, **kwargs)
File "C:\Anaconda3\lib\site-packages\docutils\utils\__init__.py", line 193, in system_message
raise SystemMessage(msg, level)
SystemMessage: <string>:17: (SEVERE/4) Unexpected section title.
Parameters
----------
私が本当に望んでいるのは、本格的なパーサーを自分で書かなくても、sklearn オブジェクトの docstring を HTML に変換する方法だけです。そうする方法がない場合は、パーサーを作成するための提案を歓迎します。前もって感謝します。