Python生成词性标注JSON仅保留最后一个动词时态不定式问题求助
问题原因
- 你将
Tense、Infinitive两个键直接定义在根级data字典下,每次遍历到新动词时,都会直接覆盖这两个键的旧值,遍历结束后自然只会保留最后一个动词的对应信息。 - 现有逻辑用单词文本作为
data的键,若文本中出现重复单词,后出现的单词词性也会覆盖先出现的同名单词的词性,同样会造成数据丢失。
解决方案
你需要调整数据存储结构,将每个单词的所有属性(包括基础词性、动词专属的时态和不定式)都存在该单词对应的取值内,不要把动词专属属性放在根层级。如果需要保留所有出现过的token(包括文本重复的),建议改用列表存储所有token信息。
修改后代码示例(保留单词为键的结构,适合无重复单词的场景)
import spacy import json # 模型加载、自定义类实例化放在函数外,避免每次调用重复加载浪费资源 nlp = spacy.load("en_core_web_trf") x = english() def eng_pos(textstr): data = {} doc = nlp(textstr) for token in doc: token_info = { "pos": token.pos_ } if token.pos_ == "VERB": token_info["Tense"] = token.morph.get("Tense") token_info["Infinitive"] = x.infinitive(token.text) data[token.text] = token_info print(f"{token.text} {token.pos_}") json_data = json.dumps(data, ensure_ascii=False) print(json_data) return json_data
修改后代码示例(用列表存储所有token,适合有重复单词的场景)
import spacy import json nlp = spacy.load("en_core_web_trf") x = english() def eng_pos(textstr): data = [] doc = nlp(textstr) for token in doc: token_info = { "text": token.text, "pos": token.pos_ } if token.pos_ == "VERB": token_info["Tense"] = token.morph.get("Tense") token_info["Infinitive"] = x.infinitive(token.text) data.append(token_info) print(f"{token.text} {token.pos_}") json_data = json.dumps(data, ensure_ascii=False) print(json_data) return json_data
内容的提问来源于stack exchange,提问作者Laz22434
相关产品推荐
相关产品推荐

