文本解析详解:多种方法与错误修复
如果您对计算机编程有所涉猎,可能会接触到“文本解析”这一概念。它指的是将复杂的文件数据简化成易于处理的数值。本文将深入探讨如何利用编程语言进行文本解析,并指导您在遇到解析错误时如何解决问题。
文本解析的含义
本文将提供一份全面的文本解析指南,并简要介绍文本解析的定义。
什么是文本解析?
在开始学习如何使用代码解析文本之前,了解编程语言和编码的基础知识至关重要。
自然语言处理 (NLP)
文本解析通常借助自然语言处理(NLP)技术,它是人工智能的一个分支。Python 是常用于文本解析的语言之一。
NLP 代码使计算机能够理解和处理人类语言,从而应用于各种应用。为了将机器学习技术应用于语言,必须将非结构化文本数据转换为结构化表格数据。Python 语言常用于执行文本解析任务,从而改变程序代码的形态。
文本解析的具体定义
文本解析的本质是将数据从一种格式转换成另一种格式。文件的格式需要被解析或转换为不同的格式,以适应各种应用程序的需求。
- 换句话说,解析的过程是对字符串或文本进行分析,并通过改变文件的格式将其转换为逻辑组件。
- Python 语言提供了一些规则,可以帮助我们完成这项常见的编程任务。在解析文本时,给定的文本序列会被分解成更小的组成部分。
文本解析的目的
在学习如何解析文本之前,了解为什么要进行文本解析至关重要,这部分内容将为您解答。
- 计算机数据的格式并不统一,不同的应用程序可能会采用不同的格式。
- 由于数据格式的差异,不兼容的代码可能导致错误。
- 目前没有通用的计算机程序可以处理所有数据格式的数据。
解析方法一:利用 DataFrame 类
Python 语言的 DataFrame 类提供了文本解析所需的所有功能。这个内置库包含将任意格式的数据解析为其他格式的必要代码。
DataFrame 类简介
DataFrame 类是一种强大的数据结构,常用作数据分析工具,可以轻松分析各种数据。
- 数据会被读入 pandas DataFrame 中,以便使用 Python 语言进行分析。
- 该类包含了许多 pandas 提供的软件包,这些软件包被 Python 数据分析师广泛使用。
- 该类的特性是对 NumPy 库的抽象,即函数的内部功能对用户是隐藏的。 NumPy 库是一个 Python 库,其中包含处理数组的命令和函数。
- DataFrame 类可用于渲染具有多个行和列索引的二维数组。这些索引有助于存储多维数据,因此被称为 MultiIndex。为了解决解析错误,必须对这些索引进行修改。
Python 语言中的 pandas 库可以帮助您以最完美的方式执行 SQL 或数据库样式的操作,从而避免在解析文本时出现错误。它还包含一些 IO 工具,有助于分析 CSV、MS Excel、JSON、HDF5 以及其他数据格式的文件。
使用 DataFrame 类解析文本的步骤
要了解如何解析文本,您可以参考以下使用 DataFrame 类的标准流程。
- 首先需要识别输入数据的数据格式。
- 然后确定输出数据的格式,例如 CSV 或逗号分隔值。
- 接下来,在代码中编写原始数据类型,例如列表或字典。
注意:在空的 DataFrame 上编写代码可能会非常繁琐和复杂。 pandas 允许您从这些数据类型创建 DataFrame 类的数据。因此,原始数据类型中的数据可以轻松地解析为所需的数据格式。
- 使用数据分析工具 pandas DataFrame 分析数据,并打印结果。
选项一:标准格式
此处将解释使用特定数据格式(如 CSV)格式化文件的标准方法。
- 首先将包含数据值的文件保存在您的计算机上。 例如,您可以将文件命名为 data.txt。
- 在 pandas 中,以特定名称导入文件并将数据导入另一个变量。 例如,在给定代码中,语言的 pandas 被导入到名为 pd 的名称中。
- 导入语句应包含完整的代码,其中包含输入文件的名称、函数以及输入文件格式的详细信息。
注意:这里使用了名为 res 的变量,通过 pd 中导入的 pandas 来执行读取 data.txt 文件中数据的功能。 输入文本的数据格式指定为 CSV 格式。
- 调用指定的文件类型并分析打印结果中的解析文本。 例如,命令行执行后的命令 res 将有助于打印解析的文本。
下面给出了上述过程的示例代码,可以帮助您理解如何解析文本。
import pandas as pd res = pd.read_csv(‘data.txt’) res
在这种情况下,如果您在文件 data.txt 中输入数据值,例如 [1,2,3],它将被解析并显示为 1 2 3。
选项二:字符串方法
如果代码接收的文本只包含字符串或字母字符,可以使用字符串中的特殊字符(如逗号、空格等)来分隔和解析文本。该过程类似于常见的内部字符串操作。要了解如何修复解析错误,您必须遵循使用此选项解析文本的步骤,如下所述。
- 从字符串中提取数据,并记录所有分隔文本的特殊字符。
例如,在下面的代码中,识别了字符串 my_string 中的特殊字符,即 ‘ , ‘ 和 ‘ : ‘。 在执行此过程时必须小心,以避免在解析文本时出错。
- 根据特殊字符的值和位置,将字符串中的文本单独拆分。
例如,根据使用 split 命令识别的特殊字符,将字符串拆分为文本数据值。
- 字符串的数据值将作为解析文本单独打印。 这里,print 语句用于打印文本的解析数据值。
以下是上述过程的示例代码。
my_string = ‘Names: Tech, computer’ sfinal = [name.strip() for name in my_string.split(‘:’)[1].split(‘,’)] print(“Names: {}”.format(sfinal))
在这种情况下,解析字符串的结果如下所示。
Names: [‘Tech’, ‘computer’]
为了更清晰地理解如何解析字符串文本,可以使用 for 循环并对代码进行如下修改。
my_string = ‘Names: Tech, computer’ s1 = my_string.split(‘:’) s2 = s1[1] s3 = s2.split(‘,’) s4 = [name.strip() for name in s3] for idx, item in enumerate([s1, s2, s3, s4]): print(“Step {}: {}”.format(idx, item))
每个步骤的解析文本结果如下所示。您可以注意到,在步骤 0 中,字符串基于特殊字符 : 进行分隔,文本数据值在进一步的步骤中基于字符进行分隔。
Step 0: [‘Names’, ‘Tech, computer’] Step 1: Tech, computer Step 2: [‘ Tech’, ‘ computer’] Step 3: [‘Tech’, ‘computer’]
选项三:解析复杂文件
在大多数情况下,需要解析的文件数据包含不同的数据类型和数据值。在这种情况下,使用前面介绍的方法可能难以解析文件。
解析文件中复杂数据的特点是使数据值以表格形式显示。
- 值的标题或元数据打印在文件顶部,
- 变量和字段以表格形式打印在输出中,并且
- 数据值形成一个复合键。
在深入学习如何使用这种方法解析文本之前,有必要先了解一些基本概念。数据值的解析是基于正则表达式或 Regex 完成的。
正则表达式模式
要了解如何修复解析错误,您必须确保表达式中的正则表达式模式是正确的。解析字符串数据值的代码将涉及以下常见的正则表达式模式。
- ‘d’ : 匹配字符串中的十进制数字,
- ‘s’ : 匹配空白字符,
- ‘w’ : 匹配字母数字字符,
- ‘+’ 或 ‘*’ : 通过匹配字符串中的一个或多个字符来执行贪婪匹配,
- ‘a-z’ : 匹配文本数据值中的小写组,
- ‘A-Z’ 或 ‘a-z’ : 匹配字符串的大小写组,并且
- ‘0-9’ : 匹配数值。
常用表达式
正则表达式模块是 Python 语言中 pandas 包的主要组成部分,错误的正则表达式可能会导致解析错误。它是一种嵌入在 Python 中的微型语言,用于在表达式中查找字符串模式。正则表达式是一种具有特殊语法的字符串,它允许用户根据字符串中的值匹配其他字符串中的模式。
正则表达式是根据数据类型和字符串中表达式的要求创建的,例如 ‘String = (.*)n’。正则表达式在每个表达式的模式之前使用。下面列出了正则表达式中使用的符号,这有助于您理解如何解析文本。
- . : 从数据中检索任何字符,
- * : 使用前一个表达式中的零个或多个数据,
- (.*) : 将正则表达式的一部分分组在括号内,
- n : 在代码行的末尾创建一个换行符,
- d : 在 0 到 9 范围内创建一个短整数值,
- + : 使用前一个表达式中的一个或多个数据,并且
- | : 创建一个逻辑语句; 用于或表达式。
正则表达式对象
RegexObject 是编译函数的返回值,如果表达式与匹配值匹配,则用于返回 MatchObject。
1. 匹配对象
由于 MatchObject 的布尔值始终为 True,您可以使用 if 语句来识别对象中的正匹配。在使用 if 语句的情况下,索引引用的组用于查找表达式中对象的匹配项。
- group() 返回一个或多个匹配子组,
- group(0) 返回整个匹配,
- group(1) 返回第一个带括号的子组,并且
- 在引用多个组时,我们应该使用 python 特定的扩展。此扩展名用于指定必须在其中找到匹配项的组的名称。括号内的组中提供了特定的扩展名。例如,表达式 (?P<group1>regex1) 将引用名称为 group1 的特定组,并检查正则表达式 regex1 中的匹配项。要了解如何修复解析错误,您必须检查组是否正确指向。
2. MatchObject 的方法
在寻找如何解析文本时,了解 MatchObject 有两种基本方法非常重要,如下所示。如果在指定的表达式中找到 MatchObject,它将返回其实例,否则将返回 None。
- match(string) 方法用于在正则表达式的开头查找字符串的匹配项,并且
- search(string) 方法用于扫描字符串以查找正则表达式中匹配的位置。
正则表达式函数
正则表达式函数是用于执行用户从获取的数据值集中指定的特定函数的代码行。
注意:为了编写函数,原始字符串用于正则表达式以避免在解析文本时出现错误。这是通过在表达式中的每个模式之前添加下标 r 来完成的。
下面解释表达式中使用的常用函数。
1. re.findall()
如果找到匹配项,此函数将返回字符串中的所有模式;如果未找到匹配项,则返回一个空列表。例如,函数 string = re.findall(‘[aeiou]’, regex_filename) 用于查找文件名中出现的元音。
2. re.split()
此函数用于在找到与指定字符(例如空格)匹配的情况下拆分字符串。如果未找到匹配项,则返回一个空字符串。
3. re.sub()
该函数用给定的替换变量的内容替换匹配的文本。与其他函数相反,如果未找到模式,则返回原始字符串。
4. re.search()
帮助学习如何解析文本的基本功能之一是搜索功能。它有助于在字符串中搜索模式并返回匹配对象。如果搜索未能识别匹配项,则不返回任何值。
5. re.compile(模式)
该函数用于将正则表达式模式编译为 RegexObject,这在前面已经讨论过了。
其他需求
以下列出的要求是高级程序员在数据分析中使用的其他功能。
- 为了可视化正则表达式,使用了 regexper,并且
- 为了测试正则表达式,使用了 regex101。
解析文本的步骤
在此复杂选项中解析文本的方法如下所述。
- 最重要的一步是通过读取文件的内容来理解输入格式。例如,with open 和 read() 函数用于打开和读取名为 sample 的文件的内容。示例文件包含文件 file.txt 中的内容;要了解如何修复解析错误,必须完整读取文件。
- 打印文件的内容以手动分析数据,找出值的元数据。这里,print() 函数用于打印示例文件的内容。
- 解析文本所需的数据包被导入到代码中,并为类命名以进行进一步编码。在这里,正则表达式和 pandas 被导入。
- 在文件中定义代码所需的正则表达式,包括正则表达式模式和正则表达式函数。这允许文本对象或语料库通过代码进行数据分析。
- 要了解如何解析文本,您可以参考此处给出的示例代码。compile() 函数用于从文件 filename 的组 stringname1 中编译字符串。命令 ief_parse_line(line) 使用了在正则表达式中检查匹配的函数。
- 代码的行解析器是使用 def_parse_file(filepath) 编写的,其中定义的函数检查指定函数中的所有正则表达式匹配。在这里,regex search() 方法在文件 filename 中搜索键 rx 并返回第一个匹配的正则表达式的键和匹配项。此步骤的任何问题都可能导致解析文本时出错。
- 下一步是使用文件解析器函数编写一个文件解析器,即 def_parse_file(filepath)。创建一个空列表来收集代码的数据,因为 data = [],通过 match = _parse_line(line) 在每一行检查匹配,并根据数据类型返回确切的值数据。
- 要提取表格的数字和值,使用命令行 .strip().split(‘,’)。row{} 命令用于创建包含数据行的字典。data.append(row) 命令用于理解数据并将其解析为表格格式。
命令 data = pd.DataFrame(data) 用于从字典值创建 pandas DataFrame。或者,您可以将以下命令用于如下所述的相应目的。
- 数据集索引([‘string’, ‘integer’]inplace=True) 设置表的索引。
- data = data.groupby(level=data.index.names).first() 合并和删除 nans。
- data = data.apply(pd.to_numeric, errors=’ignore’) 将分数从浮点数升级为整数值。
了解如何解析文本的最后一步是使用 if 语句测试解析器,方法是将值分配给变量 data 并使用 print(data) 命令打印它。
此处给出了上述解释的示例代码。
with open(‘file.txt’) as sample: sample_contents = sample.read() print(sample_contents) import re import pandas as pd rx_filename = { ‘string1’: re.compile(r ‘string = (?<P<stringname1>.*)n’), } ief_parse_line(line): for key, rx in rx_filename.items(): match = rx.search(line) if match: return key, match return None, None def parse_file(filepath): data = [] with open(filepath, ‘r’) as file_object: line = file_object.readline() while line: key, match = _parse_line(line) if key == ‘string1’: string = match.group(‘string1’) integer = int(string1) value_type = match.group(‘string1’) line = file_object.readline() while line.strip(): number, value = line.strip().split(‘,’) value = value.strip() row = { ‘Data1’: string1, ‘Data2’: number, value_type: value } data.append(row) line = file_object.readline() line = file_object.readline() data = pd.DataFrame(data) return data if _ _name_ _ = = ‘_ _main_ _’: filepath = ‘sample.txt’ data = parse(filepath) print(data)
解析方法二:利用分词技术
根据某些规则将文本或语料库转换为标记或更小片段的过程称为标记化。要了解如何修复解析错误,分析代码中的单词标记化命令至关重要。与正则表达式类似,可以在此方法中创建自己的规则,这有助于文本预处理任务,例如映射词性。此外,此方法还可以执行诸如查找和匹配常用词、清理文本以及为高级文本分析技术(如情感分析)准备数据等活动。如果分词不当,可能会出现文本解析错误。
NLTK 库
该过程借助一个名为 nltk 的流行语言工具包库的帮助,该库具有用于执行许多 NLP 作业的丰富函数集。这些可以通过 Pip 或 Pip 安装包下载。要了解如何解析文本,可以使用默认包含该库的 Anaconda 发行版的基本包。
标记化的形式
这种方法的常见形式是词分词和句子分词。由于单词级别的标记,前者只打印一个单词一次,而后者在句子级别打印单词。
解析文本的步骤
- 导入 ntlk 工具包库,并从库中导入标记化表格。
- 给出一个字符串,并给出执行标记化的命令。
- 打印字符串时,输出将是 computer is the word。
- 在单词标记化或 word_tokenize() 的情况下,句子中的每个单词都单独打印在 ” 中,并用逗号分隔。 该命令的输出将是 ‘computer’、’is’、’the’、’word’、’.’
- 在句子标记化或 sent_tokenize() 的情况下,单个句子放置在 ” 内,并且允许单词重复。该命令的输出将是 “computer is the word”。
此处给出了解释上述标记化步骤的代码。
import nltk from nltk.tokenize import sent_tokenize, word_tokenize string = “computer is the word.” print(string) print(word_tokenize(string)) print(sent_tokenize(string))
解析方法三:利用 DocParser 类
与 DataFrame 类类似,可以使用 DocParser 类来解析代码中的文本。该类允许您使用文件路径调用 parse 函数。
解析文本的步骤
要了解如何使用 DocParser 类解析文本,请按照以下说明进行操作。
- get_format(filename) 函数用于提取文件扩展名,将其返回给函数的集合变量,并将其传递给下一个函数。例如,p1 = get_format(filename) 将提取文件名的文件扩展名,将其设置为变量 p1,并将其传递给下一个函数。
- 使用 if-elif-else 语句和函数构建具有其他函数的逻辑结构。
- 如果文件扩展名有效且结构符合逻辑,则使用 get_parser 函数解析文件路径中的数据,并将字符串对象返回给用户。
注意:要了解如何修复解析错误,必须正确实现此功能。
- 数据值的解析是通过文件的文件扩展名完成的。该类的具体实现是 parse_txt 或 parse_docx,用于从给定文件类型的部分生成字符串对象。
- 可以对其他可读扩展名的文件进行解析,例如 parse_pdf、parse_html 和 parse_pptx。
- 可以使用 import 语句将数据值和接口导入应用程序并实例化 DocParser 对象。这可以通过解析 Python 语言中的文件来完成,例如 parse_file.py。此操作必须小心完成,以避免在解析文本时出错。
解析方法四:使用在线解析工具
在线解析工具可以用于从变量中提取特定数据并将它们映射到其他变量。它独立于任务中使用的任何其他工具,并且可以使用 BPA 平台工具来使用和输出变量。您可以使用此链接访问在线解析文本工具 并使用前面给出的关于如何解析文本的答案。
解析方法五:TextFieldParser (Visual Basic)
TextFieldParser 利用对象来解析和处理非常大的结构化和分隔文件。这种方法可以使用文本的宽度和列,例如日志文件或遗留数据库信息。解析方法类似于在文本文件上迭代代码,主要用于提取文本字段,类似于字符串操作方法。这样做是为了使用定义的分隔符(例如逗号或制表符空格)对分隔的字符串和各种宽度的字段进行标记。
解析文本的函数
以下函数可用于解析此方法中的文本。
- 要定义分隔符,使用 SetDelimiters。例如,命令 testReader.SetDelimiters (vbTab) 用于将制表符空间设置为分隔符。
- 要将字段宽度设置为正整数值到文本文件的固定字段宽度,可以使用 testReader.SetFieldWidths (integer) 命令。
- 要测试文本的字段类型,可以使用以下命令 testReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.FixedWidth。
查找 MatchObject 的方法
有两种基本方法可以在代码或解析后的文本中找到 MatchObject。
- 第一种方法是定义格式并使用 ReadFields 方法循环文件。此方法将有助于处理代码的每一行。
- PeekChars 方法用于在读取之前单独检查每个字段,定义多种格式并做出反应。
在任何一种情况下,如果在执行解析或查找如何解析文本时字段与指定格式不匹配,则会返回 MalformedLineException 异常。
专业提示:如何通过 MS Excel 解析文本
作为解析文本的最终且简单的方法,您可以使用 微软Excel app 作为解析器来创建制表符分隔和逗号分隔的文件。这将有助于与您的解析结果进行交叉检查,并有助于找到如何修复解析错误。
1. 选择源文件中的数据值,同时按 Ctrl + C 键复制文件。
2. 使用 Windows 搜索栏打开 Excel 应用程序。
3. 单击 A1 单元格并同时按 Ctrl + V 键粘贴复制的文本。
4. 选择 A1 单元格,导航到数据选项卡,然后单击数据工具部分中的文本到列选项。
5A。如果使用逗号或制表符空格作为分隔符,请选择 Delimited 选项,然后单击 Next 和 Finish 按钮。
5B。选择固定宽度选项,为分隔符指定一个值,然后单击下一步和完成按钮。
如何修复解析错误
在 Android 设备上可能会出现解析文本 x 的错误,因为出现解析错误:解析包时出现问题。这通常发生在应用无法从 Google Play 商店安装或运行第三方应用时。
如果字符向量列表被循环且其他函数形成用于计算数据值的线性模型,则可能会出现错误文本 x。错误消息是解析中的错误(文本 = x,keep.source = FALSE):<文本>:2.0:输入 1 的意外结束:OffenceAgainst ~ ^。
您可以阅读有关如何在 Android 上修复解析错误的文章,以了解修复错误的原因和方法。
除了指南中给出的解决方案外,您还可以尝试以下修复。
- 重新下载 .apk 文件或恢复文件名。
- 如果您具有专家级编程技能,则可以尝试恢复 Androidmanifest.xml 文件中的更改。
***
希望本文能帮助您理解如何解析文本,并解决解析过程中遇到的问题。请告诉我们哪种方法对您最有效,并分享您的建议和疑问。欢迎在下方评论区留言。