[自然语言处理] 自然语言处理库spaCy使用指北
spaCy是一个基于Python编写的开源自然语言处理库。基于自然处理领域的最新研究,spaCy提供了一系列高效且易用的工具,用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。spaCy的官方仓库地址为:spaCy-github。本文主要参考其官方网站的文档,spaCy的官方网站地址为:spaCy。
目录1 背景介绍与spaCy安装1.1 自然语言处理简介1.2 spaCy安装2 spaCy快速入门2.1 分词2.2 词性标注与依存关系2.3 命名实体识别2.4 词向量与相似性3 spaCy结构体系3.1 spaCy处理流程3.2 spaCy工程结构4 参考1 背景介绍与spaCy安装1.1 自然语言处理简介自然语言处理(Natural Language Processing,简称NLP)是一门研究人类语言与计算机之间交互的领域,旨在使计算机能够理解、解析、生成和处理人类语言。NLP结合了计算机科学、人工智能和语言学的知识,通过各种算法和技术来处理和分析文本数据。近年来,随着深度学习技术的发展,神经网络模型在自然语言处理(NLP)领域取得了重大的突破。其中,循环神经网络(RNN)、长短时记忆网络(LSTM)和Transformer等模型都发挥了关键作用。这些模型为NLP任务带来了更好的性能和效果,推动了NLP的发展和应用。
(资料图片)
NLP主要知识结构如下图所示,图片来自网络。
NLP的应用非常广泛,涵盖了多个领域,如机器翻译、信息提取、文本分类、情感分析、自动摘要、问答系统、语音识别和语音合成等。以下是NLP常用的技术和方法:
分词:将连续的文本分割成有意义的词语或标记,是许多NLP任务的基础。词性标注:为文本中的每个词语赋予其相应的词性,如名词、动词、形容词等。句法分析:分析句子的语法结构,识别出句子中的短语、修饰语和依存关系等。语义分析:理解文本的意义和语义关系,包括命名实体识别、语义角色标注和语义解析等。机器翻译:将一种语言的文本自动翻译成另一种语言。文本分类:将文本按照预定义的类别进行分类,如垃圾邮件分类、情感分类等。信息提取:从结构化和非结构化文本中提取出特定的信息,如实体关系抽取、事件抽取等。问答系统:通过对用户提出的问题进行理解和回答,提供准确的答案或相关信息。情感分析:识别和分析文本中的情感倾向,如正面、负面或中性情感。文本生成:使用NLP技术生成自然语言文本,如自动摘要生成、对话系统和机器作文等。在众多自然语言处理库中,spaCy库提供了超过73种语言的支持,并为25种语言提供了训练代码。该库提供了一系列简单易用的模型和函数接口,包括分词、词性标注等功能。用户还可以使用PyTorch、TensorFlow等框架在spaCy创建自定义模型,以满足特定需求。spaCy支持的语言模型见spaCy-models。
事实上,有一些自然语言处理开源库,例如HuggingFace的Transformers、PaddleNLP和NLTK,相较于spaCy来说更为专业且性能更好。然而,对于简单的应用而言,spaCy更为适合,因为它具有简单易用、功能全面,同时也提供了大量面向多语言预训练模型的优点。此外,随着以GPT-3为代表的语言大模型在自然语言处理领域取得了巨大的突破和成功,原本一些自然语言处理库在精度上实际不如语言大模型。然而,使用语言大模型需要庞大的推理资源,而在对精度要求不高的场景中,使用spaCy这类小巧的自然语言处理库依然是很合适的选择。
1.2 spaCy安装spaCy采用采用模块和语言模块一起安装的模式。spaCy的设计目标之一是模块化和可定制性。它允许用户仅安装必需的模块和语言数据,以减少安装的整体大小和减轻资源负担。如果使用spaCy的模型,需要通过pip安装模型所需的模型包来使用预训练模型。这是因为spaCy的模型包含了训练后的权重参数和其他必要的文件,这些文件在安装时被存储在特定位置,而不是以单个文件的形式存在。如果需要进行模型训练和gpu运行则需要选定对应的安装包。将模块和语言模块一起安装,可以简化spaCy的配置过程。用户无需单独下载和配置语言数据,也不需要手动指定要使用的语言模型。这样可以减少用户的工作量和安装过程中的潜在错误。但是可定制性就很弱了,所以spaCy适合精度要求不高的简单使用,工程应用选择其他大型自然语言处理库更加合适。
为了实现这一目标,spaCy提供了配置化的安装指令选择页面供用户使用。安装指令选择页面地址为spaCy-usage。下图展示了本文的安装配置项,本文采用了最简单的cpu推理模式。
spaCy安装完毕后,运行以下代码即可判断spaCy及相对应的语言模型是否安装成功。
# jupyter notebook环境去除warningimport warningswarnings.filterwarnings("ignore")import spacyspacy.__version__"3.6.0"import spacy# 加载已安装的中文模型nlp = spacy.load("zh_core_web_sm")# 执行一些简单的NLP任务doc = nlp("早上好!")for token in doc: # token.text表示标记的原始文本,token.pos_表示标记的词性(part-of-speech),token.dep_表示标记与其他标记之间的句法依存关系 print(token.text, token.pos_, token.dep_)早上 NOUN nmod:tmod好 VERB ROOT! PUNCT punct2 spaCy快速入门该部分内容和图片主要来自于spacy-101的总结。spaCy提供的主要函数模块分为以下模块,接下来分别对这些模块进行介绍。
| 名称 | 描述 |
|---|---|
| Tokenization | 将文本分割成单词、标点符号等。 |
| Part-of-speech (POS) Tagging | 给标记分配词性,如动词或名词。 |
| Dependency Parsing | 分配句法依存标签,描述个别标记之间的关系,如主语或宾语。 |
| Lemmatization | 分配单词的基本形式。例如,“was”的基本形式是“be”,“rats”的基本形式是“rat”。 |
| Sentence Boundary Detection (SBD) | 查找和分割单个句子。 |
| Named Entity Recognition (NER) | 对命名的“现实世界”对象进行标记,如人物、公司或地点。 |
| Entity Linking (EL) | 将文本实体与知识库中的唯一标识符进行消岐。 |
| Similarity | 比较单词、文本片段和文档之间的相似程度。 |
| Text Classification | 为整个文档或文档的部分分配类别或标签。 |
| Rule-based Matching | 根据其文本和语言注释查找标记序列,类似于正则表达式。 |
| Training | 更新和改进统计模型的预测能力。 |
| Serialization | 将对象保存到文件或字节字符串中。 |
在处理过程中,spaCy首先对文本进行标记,即将其分段为单词、标点符号等Token。这是通过应用每种语言特有的规则来实现的。Token表示自然语言文本的最小单位。每个Token都代表着文本中的一个原子元素,通常是单词或标点符号。
import spacynlp = spacy.load("zh_core_web_sm")# 使对文本进行一键处理doc = nlp("南京长江大桥是金陵四十景之一!")# 遍历doc中的每个Tokenfor token in doc: print(token.text)南京长江大桥是金陵四十景之一!import spacynlp = spacy.load("en_core_web_sm")doc = nlp("Apple is looking at buying U.K. startup for $1 billion")for token in doc: print(token.text)AppleislookingatbuyingU.K.startupfor$1billion对于中文分词有时会出现专有名词被拆分,比如南京长江大桥被拆分为南京、长江、大桥。我们可以添加自定义词典来解决该问题,但是要注意的是自定义词典添加只针对某些语言模型。
import spacynlp = spacy.load("zh_core_web_sm")# 添加自定义词汇nlp.tokenizer.pkuseg_update_user_dict(["南京长江大桥","金陵四十景"])doc = nlp("南京长江大桥是金陵四十景之一!")for token in doc: print(token.text)南京长江大桥是金陵四十景之一!2.2 词性标注与依存关系spaCy在分词后,会对句子中每个词进行词性标注以及确定句子中单词之间的语法关系,要注意这些关系具体范围取决于所使用的模型。示例代码如下所示:
import spacynlp = spacy.load("en_core_web_sm")doc = nlp("Apple is looking at buying U.K. startup for $1 billion")# token.text: 单词的原始形式。# token.lemma_: 单词的基本形式(或词干)。例如,“running”的词干是“run”。# token.pos_: 单词的粗粒度的词性标注,如名词、动词、形容词等。# token.tag_: 单词的细粒度的词性标注,提供更多的语法信息。# token.dep_: 单词在句子中的依存关系角色,例如主语、宾语等。# token.shape_: 单词的形状信息,例如,单词的大小写,是否有标点符号等。# token.is_alpha: 这是一个布尔值,用于检查token是否全部由字母组成。# token.is_stop: 这是一个布尔值,用于检查token是否为停用词(如“the”、“is”等在英语中非常常见但通常不包含太多信息的词)。for token in doc: print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_, token.shape_, token.is_alpha, token.is_stop)Apple Apple PROPN NNP nsubj Xxxxx True Falseis be AUX VBZ aux xx True Truelooking look VERB VBG ROOT xxxx True Falseat at ADP IN prep xx True Truebuying buy VERB VBG pcomp xxxx True FalseU.K. U.K. PROPN NNP dobj X.X. False Falsestartup startup NOUN NN advcl xxxx True Falsefor for ADP IN prep xxx True True$ $ SYM $ quantmod $ False False1 1 NUM CD compound d False Falsebillion billion NUM CD pobj xxxx True False在上述代码中pos_所用是常见的单词词性标注。tag_所支持的词性标注及解释如下:
# 获取所有词性标注(tag_)和它们的描述tag_descriptions = {tag: spacy.explain(tag) for tag in nlp.get_pipe("tagger").labels}# 打印词性标注(tag_)及其描述# print("词性标注 (TAG) 及其描述:")# for tag, description in tag_descriptions.items():# print(f"{tag}: {description}")dep__所支持的依存关系及解释如下:
# 获取所有依存关系标注和它们的描述par_descriptions = {par: spacy.explain(par) for par in nlp.get_pipe("parser").labels}# print("依存关系及其描述:")# for par, description in par_descriptions.items():# print(f"{par}: {description}")2.3 命名实体识别命名实体识别(Named Entity Recognition, 简称NER)是自然语言处理中的一项基础任务,应用范围非常广泛。 NER是指识别文本中具有特定意义或者指代性强的实体,通常包括人名、地名、机构名、日期时间、专有名词等。spaCy使用如下:
import spacynlp = spacy.load("zh_core_web_sm")# 添加自定义词汇nlp.tokenizer.pkuseg_update_user_dict(["东方明珠"])# 自定义词汇可能不会进入实体识别。doc = nlp("东方明珠是一座位于中国上海市的标志性建筑,建造于1991年,是一座高度为468米的电视塔。")for ent in doc.ents: # 实体文本,开始位置,结束位置,实体标签 print(ent.text, ent.start_char, ent.end_char, ent.label_)中国上海市 9 14 GPE1991年 24 29 DATE468米 36 40 QUANTITY如果想知道所有的实体以及其对应的含义,可以执行以下代码:
# 获取命名实体标签及其含义entity_labels = nlp.get_pipe("ner").labels# 打印输出所有命名实体及其含义for label in entity_labels: print("{}: {}".format(label,spacy.explain(label)))CARDINAL: Numerals that do not fall under another typeDATE: Absolute or relative dates or periodsEVENT: Named hurricanes, battles, wars, sports events, etc.FAC: Buildings, airports, highways, bridges, etc.GPE: Countries, cities, statesLANGUAGE: Any named languageLAW: Named documents made into laws.LOC: Non-GPE locations, mountain ranges, bodies of waterMONEY: Monetary values, including unitNORP: Nationalities or religious or political groupsORDINAL: "first", "second", etc.ORG: Companies, agencies, institutions, etc.PERCENT: Percentage, including "%"PERSON: People, including fictionalPRODUCT: Objects, vehicles, foods, etc. (not services)QUANTITY: Measurements, as of weight or distanceTIME: Times smaller than a dayWORK_OF_ART: Titles of books, songs, etc.2.4 词向量与相似性词向量是自然语言处理中一种重要的表示方式,它将单词映射为实数向量。这种表示方式能够捕捉单词之间的语义关系,并将语义信息转化为计算机能够处理的数值形式。
传统的自然语言处理方法往往将文本表示为离散的符号,例如独热编码或者词袋模型。然而,这种方法忽略了单词之间的语义相似性,而且维度过高,造成稀疏性问题。相比之下,词向量通过将每个单词映射到连续的向量空间中,可以更好地捕捉单词之间的语义关系,并且降低了特征空间的维度,使得文本处理更加高效。通过计算两个词向量之间的距离或夹角可以衡量词向量的相似性。
提取句子中每一个词的词向量代码如下:
import spacy# 加载中文模型"zh_core_web_sm"nlp = spacy.load("zh_core_web_sm")# 对给定文本进行分词和词性标注tokens = nlp("东方明珠是一座位于中国上海市的标志性建筑!")# 遍历分词后的每个词语for token in tokens: # 输出词语的文本内容、是否有对应的向量表示、向量范数和是否为未登录词(Out-of-vocabulary,即不在词向量词典中的词) print(token.text, token.has_vector, token.vector_norm, token.is_oov)东方 True 11.572288 True明珠 True 10.620552 True是 True 12.337883 True一 True 12.998204 True座位 True 10.186406 True于 True 13.540245 True中国 True 12.459145 True上海市 True 12.004954 True的 True 12.90457 True标志性 True 13.601862 True建筑 True 10.46621 True! True 12.811246 True如果想得到某个句子或者某个词的词向量,代码如下:
# 该词向量没有归一化tokens.vector.shape(96,)spaCy提供了similarity函数以计算两个文本向量的相似度。示例代码如下:
import spacy# 为了方便这里使用小模型,推荐使用更大的模型nlp = spacy.load("zh_core_web_sm") doc1 = nlp("东方明珠是一座位于中国上海市的标志性建筑")doc2 = nlp("南京长江大桥是金陵四十景之一!")# 计算两个文本的相似度print(doc1, "<->", doc2, doc1.similarity(doc2))东方明珠是一座位于中国上海市的标志性建筑 <-> 南京长江大桥是金陵四十景之一! 0.5743045135827821在上面代码中相似度计算方式默认使用余弦相似度。余弦相似度范围为0到1,数值越高表明词向量越相似。一般来说词向量相似度使用spacy通用模型准确度可能很低,可以尝试使用专用模型或者自行训练模型,spacy推荐使用sense2vec来计算模型相似度。
此外如果仅仅使用spacy提取文本向量,可以用numpy手动计算文本相似度,代码如下:
import numpy as npimport spacynlp = spacy.load("zh_core_web_sm") doc1 = nlp("东方明珠是一座位于中国上海市的标志性建筑")doc2 = nlp("南京长江大桥是金陵四十景之一!")# 获取doc1和doc2的词向量vec1 = doc1.vectorvec2 = doc2.vector# 使用NumPy计算相似度得分,np.linalg.norm(vec1)就是doc1.vector_normsimilarity_score = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))print(doc1, "<->", doc2,similarity_score)东方明珠是一座位于中国上海市的标志性建筑 <-> 南京长江大桥是金陵四十景之一! 0.57430463 spaCy结构体系3.1 spaCy处理流程当在一个文本上调用nlp模型时,spaCy首先对文本进行分词处理,生成一个Doc对象。接着,Doc对象将在几个不同的步骤中进行处理。训练好的处理流程通常包括词性标注器、依存句法解析器和实体识别器等处理组件。这些组件相互独立,每个处理流程组件都会返回处理后的Doc对象,然后将其传递给下一个组件。最终生成的Doc对象是一个包含了所有单词和标点符号的序列,每个单词被表示为Token对象。每个Token对象包含了单词本身的内容、词性标注、词形还原后的形式等信息。以下图片解释了使用spaCy进行文本处理的过程。
如上图所示,模型管道中所涉及到的模块主要取决于该模型的结构和训练方式。其中分词tokenizer是一个特殊的组件且独立于其他组件之外,这是因为其他组件模块在调用前都会先调用tokenizer以对字符串进行分词。所有支持主要的模块如下,这些模块的使用已在前一章进行介绍。
| 名称 | 组件 | 创建 | 描述 |
|---|---|---|---|
| tokenizer | Tokenizer | Doc | 将文本分割为标记。 |
| tagger | Tagger | Token.tag | 为标记分配词性标签。 |
| parser | DependencyParser | Token.head,Token.dep,Doc.sents,Doc.noun_chunks | 分配依赖关系标签。 |
| ner | EntityRecognizer | Doc.ents,Token.ent_iob,Token.ent_type | 检测和标记命名实体。 |
| lemmatizer | Lemmatizer | Token.lemma | 分配单词的基本形式。 |
| textcat | TextCategorizer | Doc.cats | 分配文档标签。 |
| custom | 自定义组件 | Doc..xxx,Token..xxx,Span._.xxx | 分配自定义属性、方法或属性。 |
一个spacy的模型所支持的文本处理组件查看方式如下:
import spacy# 加载中文模型"zh_core_web_sm"nlp = spacy.load("zh_core_web_sm")# 查看所支持的组件nlp.pipe_names["tok2vec", "tagger", "parser", "attribute_ruler", "ner"]基于以下代码可以控制组件的选择和使用,以加快执行速度:
# 加载不包含命名实体识别器(NER)的管道nlp = spacy.load("zh_core_web_sm", exclude=["ner"])# 查看所支持的组件nlp.pipe_names["tok2vec", "tagger", "parser", "attribute_ruler"]# 只启用tagger管道nlp = spacy.load("zh_core_web_sm",enable=[ "tagger"])nlp.pipe_names["tagger"]# 加载词性标注器(tagger)和依存句法解析器(parser),但不启用它们nlp = spacy.load("zh_core_web_sm", disable=["tagger", "parser"],)# 禁用某些组件nlp.disable_pipe("ner")nlp.pipe_names["tok2vec", "attribute_ruler"]3.2 spaCy工程结构spaCy中的中心数据结构是Language类、Vocab和Doc对象。Language类用于处理文本并将其转换为Doc对象。它通常存储为一个名为nlp的变量。Doc对象拥有令牌序列及其所有注释。通过在Vocab中集中字符串、词向量和词法属性。这些主要类和对象的介绍如下所示:
常用模块的介绍如下:
Doc
Doc是spaCy中一个重要的对象,它代表了一个文本文档,并包含了文本中的所有信息,如单词、标点、词性、依赖关系等。可以通过spaCy的Language对象对文本进行处理,得到一个Doc对象。
DocBin
DocBin 是用于高效序列化和反序列化Doc对象的数据结构,以在不同的过程中保存和加载Doc对象。使用代码如下:
# 导入所需的库import spacyfrom spacy.tokens import DocBin# 加载英文预训练模型nlp = spacy.load("en_core_web_sm")# 定义待处理文本texts = ["This is sentence 1.", "And this is sentence 2."]# 将每个文本转化为Doc对象,用nlp处理并保存到docs列表中docs = [nlp(text) for text in texts]# 创建一个新的DocBin对象,用于保存文档数据,并启用存储用户数据的功能docbin = DocBin(store_user_data=True)# 将每个Doc对象添加到DocBin中for doc in docs: docbin.add(doc)# 将DocBin保存到文件中with open("documents.spacy", "wb") as f: f.write(docbin.to_bytes())# 从文件中加载DocBinwith open("documents.spacy", "rb") as f: bytes_data = f.read()# 从字节数据中恢复加载DocBin对象loaded_docbin = DocBin().from_bytes(bytes_data)# 使用nlp.vocab获取词汇表,并通过DocBin获取所有加载的文档loaded_docs = list(loaded_docbin.get_docs(nlp.vocab))# 输出加载的文档loaded_docs[This is sentence 1., And this is sentence 2.]Example
Example用于训练spaCy模型,它包含了一个输入文本(Doc)和其对应的标注数据。关于spaCy模型的训练,见:spaCy-training
Language
Language是spaCy的核心对象之一,它负责处理文本的预处理、词性标注、句法分析等任务。可以通过spacy.load()来加载一个具体的语言模型,获取对应的Language对象。
Lexeme
Lexeme 是一个单词在词汇表中的表示,它包含了关于该单词的各种信息,如词性、词频等。示例代码如下:
nlp = spacy.load("en_core_web_sm")# 定义一个单词word = "hello"# 获取单词对应的词元(lexeme)lexeme = nlp.vocab[word]# 打印词元的文本内容、是否为字母(alphabetical)# 是否为停用词(stopword)\是否为字母(is_alpha),是否为数字(is_digit),是否为标题(is_title),语言(lang_)print(lexeme.text, lexeme.is_alpha, lexeme.is_stop, lexeme.is_alpha, lexeme.is_digit, lexeme.is_title, lexeme.lang_)hello True False True False False en事实上对于Lexeme,只要可能,spaCy就会尝试将数据存储在一个词汇表Vocab中,该词汇表将由多个模型共享。为了节省内存,spaCy还将所有字符串编码为哈希值。
如下所示,不同模型下“coffee”的哈希值为3197928453018144401。但是注意的是只是spaCy这样做,其他自然语言处理库不一定这样做。
import spacynlp = spacy.load("zh_core_web_sm")doc = nlp("I love coffee")print(doc.vocab.strings["coffee"]) # 3197928453018144401print(doc.vocab.strings[3197928453018144401]) # "coffee"3197928453018144401coffeeimport spacynlp = spacy.load("en_core_web_sm")doc = nlp("I love coffee")print(doc.vocab.strings["coffee"]) # 3197928453018144401print(doc.vocab.strings[3197928453018144401]) # "coffee"3197928453018144401coffeeSpan
Span 是一个连续的文本片段,可以由一个或多个Token组成。它通常用于标记实体或短语。
nlp = spacy.load("zh_core_web_sm")text = "东方明珠是一座位于中国上海市的标志性建筑!"doc = nlp(text)# 从doc中选择了第0个和第1个词元(token)组成的片段。# 注意,spaCy中的词元是文本的基本单元,可能是单词、标点符号或其它词汇单位。# 这里东方、明珠是前两个词span = doc[0:2] print(span.text)东方明珠4 参考spaCy-githubspaCyspaCy-modelsTransformersPaddleNLPNLTKspaCy-usagesense2vecspaCy-training
标签:
经验分享 鸡蛋和糖能一起吃吗
经验知识 秧组词秧的组词秧字怎么组词
知识分享 斗破苍穹漫画系列完结了么
讲解百科 洛克王国里天空城的徽章怎么得到
科普知识 女生国字脸适合什么发型短发
知识库 幼儿园小朋友新年祝福语(48条)
成就事业高峰?这个精英队伍,有志者入
百科 如何评价余秋雨的泥步修行这本书
壮汉融合的文化遗产——陈氏滴水观音艾灸保健疗法
夏季吃什么水果养阴生津?葡萄是个不错的选择
凉茶≠凉的茶 喝凉了的凉茶真的健康吗?凉茶为什么不能凉着喝
国家统计局:5月份一线城市二手住宅销售价格环比下降0.4%
金科服务:拟收购佳源服务73.56%股权框架协议终止
金茂物管4.5亿元收购首置物业服务公司100%股权
旭辉控股回应大裁员:正考虑对造谣者采取必要措施
哈尔滨新增本土确诊病例3例 活动轨迹公布
哈尔滨市公布3例新增本土新冠肺炎确诊病例活动轨迹
山东深耕文化资源 推动旅游业高质量发展
今年新增952件(套)!南京大屠杀再添新证
四川非遗传承人张雄志:巧手捏面塑 指尖传非遗
10月以来我国寒潮为何如此频繁?中国气象局回应
56位残疾人士登上黄山 互利互勉共建生活希望
安徽潜山两车相撞 已致8人死亡3人受伤
上海洋山海关首次在出口货运渠道查获夹带卷烟
山西忻州古城:一城风华延续千年历史文脉
呼伦贝尔新巴尔虎右旗公布1例无症状感染者行动轨迹
西藏林芝:多彩民俗活动迎接工布新年
面对儿童不得不防的“杀手”,这把椅子很重要!
新增“53+1” 内蒙古累计本土确诊病例增至185例
- 昆明公安打击破坏生物多样性犯罪 抓获130名涉案嫌疑人
- 山西朔州“11·11”较大透水事故调查报告发布 对38人问责处理
- “海关国门小卫士”竞争上岗 淘汰率接近一半
- 深圳摧毁特大品牌化妆品走私网
- 28人被问责!山西石港煤业“3·25”事故调查报告公布
- 湖南韶山以河长制带动全民治水 让每一处水面“长治久清”
- 民进会员谈反映社情民意信息工作:心怀大我 敢讲实情
- 80岁“留守”奶奶短视频诉孤独 千万网友心疼:我们陪您唠嗑
- 40年来为子弟兵送出1.3万余双布鞋和鞋垫的“布鞋奶奶”走了
- 当男幼师是什么体验?他们说:有委屈尴尬 但大部分是幸福
- 庐阳警方通报幼童坠亡事件:嫌疑人已被刑拘
- 内蒙古新增本土确诊病例53例、本土无症状感染者1例
- 哈尔滨市启动部分地区第一轮全员核酸检测
- 四川通江发生两车相撞事故 致3人死亡
- 11月谣言在“身边”,别信这些无稽之谈
- 追剧为何上瘾?你追的不是剧,而是及时满足的快感
- 对症下药“十年痼疾”,“茶博士”帮老茶园重焕生机
- 不会融化的“果冻冰块”研制成功 有望改变食物冷藏方式
- “逆行”考研=集体滑落?这结论该慎下
- 老鼠油治烫伤致孩子进ICU 害人偏方为何被奉为灵丹妙药
- 老人被野猪咬伤 打猎者赔了5万多
- 既促进生产又保护生态他用古代农耕智慧造福现代农业
- “布鞋奶奶”走了 曾亲自给部队子弟兵送鞋40年
- 试行“家长学校”“持证上岗”?可以引导但不宜“法外加槛”
- 成为“南京胖哥”后的日子:见义勇为被捅伤 他说不后悔
- “法不责众”不是健走团“占道”的护身符
- 北京五道口增设行人信号灯四面全绿时段
- 北京道路停车支持ETC无感支付
- 北京多措并举提高生物多样性 今冬将迎300万只候鸟
- 北京:建议研考考生考前14天在京备考
- 将“干部”当店名 这个口子不能开
- 北京市2022年民生实事邀市民投票
- 吸氢气就能抗癌又防衰?最新“科学”流言榜发布
- 北京:242辆京牌小客车参加司法处置
- 云南磨憨边检站中老边境缴毒逾4公斤
- 故宫博物院2022年年票紧急停售 恢复销售时间将另行公告
- 世界艾滋病日:关于艾滋病,我想和你聊聊
- 北京:保障在校体育锻炼1小时获较高认可
- 满洲里高风险地区增至6个 中国内地新冠疫苗接种超25亿剂次
- 内蒙古满洲里公布55例本土确诊病例行动轨迹
- 四川绵竹首次拍摄到野生大熊猫标记行为 划定领地或吸引异性
- 广州长隆举办“猿猴特展” 稀有“夜猴”首秀
- 满洲里对公路、铁路口岸所有环节和场地加强闭环管理
- 安徽合肥警方严打食药环知森领域违法犯罪 侦破重特大案件14起
- 北京海关今年已查获2700余批次涉嫌侵权商品
- 福建福州海警局利用无人机成功查获一起非法采矿案
- 陕西83所高校辅导员“比技能、拼实力” “以赛促学”提升专业素质
- 西安警方侦破特大制毒贩毒案 缴获成品半成品疑似毒品10余公斤
- 全球首次荒漠猫卫星颈圈跟踪研究取得新进展
- 内蒙古满洲里公布55名确诊病例详情:有26名学生
