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', 'elixir']]] = None, parser_threshold: int = 0)[源代码]

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

代码中的每个顶层函数和类都加载到单独的文档中。此外,还会生成一个额外的文档,包含除已分割的函数和类之外的上层代码。

这种方法可能会提高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” (*)

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

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

参数
  • language可选[Languages]) – 如果为空(默认),它将尝试从源代码中推断语言。

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

方法

__init__ ([language, parser_threshold])

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

lazy_parse(blob)

懒解析接口。

parse(blob)

贪婪地将blob解析为文档或多个文档。

__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', 'elixir']] = None, parser_threshold: int = 0)[source]

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

参数
  • language(《可选》:`Literal`[‘cpp’、‘go’、‘java’、‘kotlin’、‘js’、‘ts’、‘php’、‘proto’、‘python’、‘rst’、‘ruby’、‘rust’、‘scala’、‘swift’、‘markdown’、‘latex’、‘html’、‘sol’、‘csharp’、‘cobol’、‘c’、‘lua’、‘perl’、‘elixir’]`]) - 如果为 None(默认),将尝试从源文件中推断语言。

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

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

懒解析接口。

子类需要实现此方法。

参数

blob (Blob) – Blob实例

返回

文档生成器

返回类型

Iterator[Document]

parse(blob: Blob) List[Document]

贪婪地将blob解析为文档或多个文档。

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

生产应用应优先选择 lazy_parse 方法。

子类通常不应覆盖此 parse 方法。

参数

blob (Blob) – Blob实例

返回

文档列表

返回类型

List[Document]

使用 LanguageParser 的示例