langchain_community.document_loaders.parsers.language.language_parser.LanguageParser

class langchain_community.document_loaders.parsers.language.language_parser.LanguageParser(language: Optional[Literal['cpp', 'go', 'java', 'kotlin', 'js', 'ts', 'php', 'proto', 'python', 'rst', 'ruby', 'rust', 'scala', 'swift', 'markdown', 'latex', 'html', 'sol', 'csharp', 'cobol', 'c', 'lua', 'perl']] = None, parser_threshold: int = 0)[source]

使用相应的编程语言语法进行解析。

代码中的每个顶层函数和类都加载到单独的文档中。 此外,还会生成一个额外的文档,其中包含剩余的顶层代码,不包括已经分割的函数和类。

这种方法可能会提高源代码上的QA模型的准确性。

支持代码解析的语言有:

  • C语言: “c” (*)

  • C++语言: “cpp” (*)

  • C#语言: “csharp” (*)

  • COBOL语言: “cobol”

  • Go语言: “go” (*)

  • Java语言: “java” (*)

  • JavaScript语言: “js” (需要安装 esprima 包)

  • Kotlin语言: “kotlin” (*)

  • Lua语言: “lua” (*)

  • Perl语言: “perl” (*)

  • Python语言: “python”

  • Ruby语言: “ruby” (*)

  • Rust语言: “rust” (*)

  • Scala语言: “scala” (*)

  • TypeScript语言: “ts” (*)

带有 (*) 标记的项目需要安装 tree_sittertree_sitter_languages 包。使用 tree_sitter 可以很容易地添加对其他语言的支持,尽管目前需要修改 LangChain。

可以配置用于解析的语言,以及基于语法激活分割所需的最小行数。

如果没有明确指定语言,则 LanguageParser 将根据文件扩展名推断语言。

示例:

    from langchain_community.document_loaders.generic import GenericLoader
    from langchain_community.document_loaders.parsers import LanguageParser

    loader = GenericLoader.from_filesystem(
        "./code",
        glob="**/*",
        suffixes=[".py", ".js"],
        parser=LanguageParser()
    )
    docs = loader.load()

手动选择语言的示例实例化:

.. code-block:: python

    loader = GenericLoader.from_filesystem(
        "./code",
        glob="**/*",
        suffixes=[".py"],
        parser=LanguageParser(language="python")
    )

设置行数阈值的示例实例化:

.. code-block:: python

    loader = GenericLoader.from_filesystem(
        "./code",
        glob="**/*",
        suffixes=[".py"],
        parser=LanguageParser(parser_threshold=200)
    )

语言解析器,根据各种语言的语法来分割代码。

参数:

language:如果为None(默认值),将尝试从源代码中推断语言。 parser_threshold:激活解析所需的最小行数(默认为0)。

Methods

__init__([language, parser_threshold])

语言解析器,根据各种语言的语法来分割代码。

lazy_parse(blob)

懒解析接口。

parse(blob)

将blob急切地解析为一个文档或多个文档。

Parameters
  • language (Optional[Language]) –

  • parser_threshold (int) –

__init__(language: Optional[Literal['cpp', 'go', 'java', 'kotlin', 'js', 'ts', 'php', 'proto', 'python', 'rst', 'ruby', 'rust', 'scala', 'swift', 'markdown', 'latex', 'html', 'sol', 'csharp', 'cobol', 'c', 'lua', 'perl']] = None, parser_threshold: int = 0)[source]

语言解析器,根据各种语言的语法来分割代码。

参数:

language:如果为None(默认值),将尝试从源代码中推断语言。 parser_threshold:激活解析所需的最小行数(默认为0)。

Parameters
  • language (Optional[Literal['cpp', 'go', 'java', 'kotlin', 'js', 'ts', 'php', 'proto', 'python', 'rst', 'ruby', 'rust', 'scala', 'swift', 'markdown', 'latex', 'html', 'sol', 'csharp', 'cobol', 'c', 'lua', 'perl']]) –

  • parser_threshold (int) –

lazy_parse(blob: Blob) Iterator[Document][source]

懒解析接口。

需要子类实现此方法。

参数:

blob: Blob实例

返回:

文档的生成器

Parameters

blob (Blob) –

Return type

Iterator[Document]

parse(blob: Blob) List[Document]

将blob急切地解析为一个文档或多个文档。

这是一个用于交互式开发环境的便利方法。

生产应用程序应该更倾向于使用lazy_parse方法。

子类通常不应该覆盖这个解析方法。

参数:

blob:Blob实例

返回:

文档列表

Parameters

blob (Blob) –

Return type

List[Document]

Examples using LanguageParser