语言解析器#

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

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

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

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

支持的代码解析语言有:

  • C: “c” (*)

  • C++: “cpp” (*)

  • C#: “csharp” (*)

  • COBOL: “cobol”

  • Elixir: “elixir”

  • Go: “go” (*)

  • Java: “java” (*)

  • JavaScript: “js” (需要包 esprima)

  • Kotlin: “kotlin” (*)

  • Lua: “lua” (*)

  • Perl: “perl” (*)

  • Python: “python”

  • Ruby: “ruby” (*)

  • Rust: “rust” (*)

  • Scala: “scala” (*)

  • SQL: “sql” (*)

  • 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()

Example instantiations to manually select the language:

.. code-block:: python


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

Example instantiations to set number of lines threshold:

.. code-block:: python

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

语言解析器,使用相应语言的语法拆分代码。

Parameters:
  • language (可选[Language]) – 如果为 None(默认值),它将尝试从源中推断语言。

  • parser_threshold (int) – 激活解析所需的最小行数(默认为0)。

方法

__init__([language, parser_threshold])

使用相应语言语法拆分代码的语言解析器。

lazy_parse(blob)

懒解析接口。

parse(blob)

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

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

语言解析器,使用相应语言的语法拆分代码。

Parameters:
  • language (Literal['cpp', 'go', 'java', 'kotlin', 'js', 'ts', 'php', 'proto', 'python', 'rst', 'ruby', 'rust', 'scala', 'markdown', 'latex', 'html', 'sol', 'csharp', 'cobol', 'c', 'lua', 'perl', 'elixir', 'sql'] | None) – 如果为 None(默认值),它将尝试从源代码中推断语言。

  • parser_threshold (int) – 激活解析所需的最小行数(默认为0)。

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

惰性解析接口。

子类需要实现这个方法。

Parameters:

blob (Blob) – Blob 实例

Returns:

文档生成器

Return type:

迭代器[文档]

parse(blob: Blob) list[Document]#

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

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

生产应用程序应优先使用lazy_parse方法。

子类通常不应重写此解析方法。

Parameters:

blob (Blob) – Blob 实例

Returns:

文档列表

Return type:

列表[Document]

使用 LanguageParser 的示例