所以,我正在使用 python sklearn库编写一个简单的应用程序。我需要解析任何 sklearn 估计器模型的文档字符串。我不熟悉 reSTructured 文本,但 sklearn “贡献文档”页面的一些快速研究似乎表明这些文档字符串是 reSTructured 文本格式。从这个问题开始,我尝试了以下操作(以支持向量分类器 SVC 为例)
from sklearn.svm import SVC
from docutils.core import publish_string
print(publish_string(SVC.__doc__, writer_name='html'))
对于任何需要它的人,原始文档字符串是
)\n 指定要在算法中使用的内核类型。\n 它必须是 'linear'、'poly'、'rbf'、'sigmoid'、'precomputed' 或\n callable 之一。\n 如果没有给定,将使用“rbf”。如果给定了可调用对象,则\n 用于预先计算内核矩阵。\n\n degree : int,可选(默认 = 3)\n 多项式内核函数 ('poly') 的度数。\n 被所有其他忽略内核。\n\n gamma : float,可选(默认 = 0.0)\n 'rbf'、'poly' 和 'sigmoid' 的内核系数。\n 如果 gamma 为 0.0,则将使用 1/n_features 代替。\n \n coef0 : float, optional (default=0.0)\n 核函数中的独立项。\n 它仅在 'poly' 和 'sigmoid' 中有意义。\n\n 概率:布尔值,可选(默认=False)\n 是否启用概率估计。这必须在调用 `fit` 之前\n 启用,并且会减慢该方法的速度。\n\n 收缩:布尔值,可选(默认 = True)\n 是否使用收缩启发式。\n\n tol:浮点数, optional (default=1e-3)\n 停止条件的容差。\n\n cache_size : float, optional\n 指定内核缓存的大小(以 MB 为单位)\n\n class_weight : {dict, 'auto' }, 可选\n 将类 i 的参数 C 设置为 class_weight[i]*C for\n SVC。如果没有给出,所有类都应该\n 权重为 1。'auto' 模式使用 y 的值来\n 自动调整权重,\n 与类频率成反比。\n\n 详细:布尔值,默认值:False\n 启用详细输出。请注意,此设置利用了 libsvm 中的\n 每个进程运行时设置,如果启用该设置,\n 可能无法在多线程上下文中正常工作。\n\n max_iter : int,可选(默认值=-1)\n求解器内迭代的硬限制,或 -1 表示无限制。\n\n random_state : int 种子、RandomState 实例或无(默认)\n 随机数生成器的种子,用于\n 改组数据概率估计。\n\n 属性\n ----------\n `support_` : 类似数组,形状 = [n_SV]\n 支持向量的索引。\n\n `support_vectors_` : array-like, shape = [n_SV, n_features]\n 支持向量。\n\n `n_support_` : array-like, dtype=int32, shape = [n_class]\n 每个类的支持向量数。\n\ n`dual_coef_`:array, shape = [n_class-1, n_SV]\n 决策函数中支持向量的系数。对于多类,所有 1-vs-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_` : array, shape = [n_class * (n_class- 1) / 2]\n 决策函数中的常量。\n\n 示例\n --------\n >>> import numpy as np\n >>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])\n >>> y = np.array([1, 1, 2, 2])\n >>> from 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,degree=3,\n gamma=0.0,kernel='rbf',max_iter=-1,probability=False,\n random_state=None,shrinking=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 , degree=3,\n gamma=0.0, kernel='rbf', max_iter=-1,probability=False,\n random_state=None, shrinking=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 , degree=3,\n gamma=0.0, kernel='rbf', max_iter=-1,probability=False,\n random_state=None, shrinking=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 " y = np.array([1, 1, 2, 2])\n >>> from 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, degree=3,\n gamma=0.0, kernel='rbf', max_iter=-1, probability=False, \n random_state=None, shrinking=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 " y = np.array([1, 1, 2, 2])\n >>> from 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, degree=3,\n gamma=0.0, kernel='rbf', max_iter=-1, probability=False, \n random_state=None, shrinking=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 " 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,shrinking=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 " 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,shrinking=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,probability=False,\n random_state=None, shrinking=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,probability=False,\n random_state=None, shrinking=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 对象的文档字符串转换为 HTML 的方法,而无需自己编写一个完整的解析器。如果没有办法这样做,那么欢迎任何关于编写解析器的建议。提前致谢。