大纲: 使用stanza进行英文句法解析的流程
工具:Jupyter Notebook
安装stanza
!pip install stanza
这一步耗时较多,因为它需要下载一些数据和模型。这些数据和模型是用于自然语言处理的,包括语言识别和命名实体识别。这些数据和模型非常大,因此下载和安装需要花费一定的时间。所以,在安装Stanza时,耐心等待,直到安装完成。
如果在一个ipynb文件中安装了一个库,其他的ipynb文件在同一个环境中,就不需要再次安装了。在同一个环境下,库已经被成功安装,其他ipynb文件可以直接引用这个库。但是,如果在不同的环境中打开ipynb文件,那么就需要在每个环境中单独安装需要使用的库。
报错
WARNING: The scripts convert-caffe2-to-onnx.exe, convert-onnx-to-caffe2.exe and torchrun.exe are installed in 'C:\Users\86180\AppData\Roaming\Python\Python39\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
解决方法
该警告意为某些可执行文件(scripts)被安装在了一个不在系统的 PATH 环境变量中的目录下。PATH 是一个包含系统用于查找可执行文件的目录列表的环境变量。这个警告通常不会导致软件功能上的问题,只是提醒你这些脚本不在系统 PATH 中。可以采取以下方法解决
将目录添加到 PATH 中: 如果你希望将这些脚本所在的目录添加到 PATH 中,这样系统就能够在任何目录下找到它们,可以按照下面的步骤来做:
- 打开系统的环境变量设置。在 Windows 上,你可以在“控制面板” -> “系统” -> “高级系统设置” -> “高级”选项卡下找到。
- 在系统属性窗口中,点击“环境变量”按钮。
- 在下方的“系统变量”部分中,找到名为 PATH 的变量,选中它,然后点击“编辑”。
- 在编辑环境变量窗口中,点击“新建”并添加你所需的目录路径(例如,'C:\Users\86180\AppData\Roaming\Python\Python39\Scripts'),然后保存并关闭窗口。
## 当然,忽略该警告也不影响使用stanza。
下载语言支持
使用命令 stanza.download() 可以下载对不同语言的支持,默认存放目录为:~/stanza_resources。可以使用 stanza.download('zh', dir="you_path") 更改存放路径。中文语言包大小为 1.5 GB,英文语言包为800多兆。
注:可能需要多试几次才能下载成功 ~
import stanza
stanza.download('en')
报错
ConnectionError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /stanfordnlp/stanza-en/resolve/v1.5.1/models/default.zip (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000013FA35D79D0>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))
解决方法
这个错误表明计算机无法建立到 "huggingface.co" 的连接,可能是因为网络问题。
因此:魔法上网后,该问题得到了解决。
加载英文模型
构造处理管道,pipeline
nlp = stanza.Pipeline('en')
载入待分析的原始文本
with open('OriTxtEn.txt', 'r') as f:
text = f.read()
开始分析
doc = nlp(text)
输出结果
for sentence in doc.sentences:
for word in sentence.words:
print(word.text, word.lemma, word.pos)
得到的结果是一个由句子(Sentence)组成的列表,每个句子包含多个词语(Word),可以使用下面的代码进行遍历和打印。
其中,word.text表示单词的原始文本,word.lemma表示单词的词元形式,word.pos表示单词在句子中的词性。
报错
无结果输出
解决方法
No sentences found 可能原因:
文本格式问题:可以尝试在文件读取后打印文本,检查是否正确读取了文本。
修改代码,添加纠错提示:
if not doc.sentences:
print("No sentences found.")
else:
for sentence in doc.sentences:
for word in sentence.words:
print(word.text, word.lemma, word.pos_)
显示
说明文件读取不出文本内容,于是重新保存txt文档。
再次尝试:
似乎已解决,继续运行。
句法分析
报错
解决方法
完整代码
import stanza
# 下载英文模型
stanza.download('en')
# 读取要分析的文本文件
with open('OriTxt.txt', 'r') as f:
text = f.read()
print("Text read from file:", text)
# 使用stanza进行句法分析
nlp = stanza.Pipeline('en')
doc = nlp(text)
# 遍历结果,打印每个单词的原始文本、词元形式和词性
if not doc.sentences:
print("No sentences found.")
else:
# 打开或创建 ResultEn.txt 文件以写入
with open(r'C:\Users\86180\NLP-dyn\ResultEn.txt', 'w', encoding='utf-8') as result_file:
# 遍历句子和单词,将结果写入文件
for sentence in doc.sentences:
for word in sentence.words:
result_line = f"{word.text} {word.lemma} {word.pos}\n"
result_file.write(result_line)
print("Results written to ResultEn.txt.")