1概览
本 notebook 演示如何使用 Semantica 的规范化模块对数据进行规范化和清洗。你将学习规范化文本、实体、日期、数字,并处理编码问题。
文档:API 参考
学习目标
- 使用
TextNormalizer进行文本清洗和规范化 - 使用
EntityNormalizer进行实体名称标准化 - 使用
DateNormalizer进行日期格式规范化 - 使用
NumberNormalizer进行数字和数量规范化 - 使用
DataCleaner进行通用数据清洗 - 使用
LanguageDetector和EncodingHandler保证数据质量
2安装
从 PyPI 安装 Semantica:
pip install semantica
# 或安装所有可选依赖:
pip install semantica[all]
3步骤 1:文本规范化
规范化文本内容以保持一致性。
# 安装 semantica 包
!pip install semantica
# 使用 TextNormalizer 清洗并规范化文本
from semantica.normalize import TextNormalizer
text_normalizer = TextNormalizer()
# 含多余空格与标点的示例文本
sample_text = "Hello World!!! This is a test."
# 转为小写并清洗文本
normalized = text_normalizer.normalize_text(sample_text, case="lower")
cleaned = text_normalizer.clean_text(sample_text, remove_special_chars=False)
sample_text, normalized, cleaned
4步骤 2:实体规范化
将实体名称规范化为规范形式。
# 将同一实体的不同写法规范化为统一形式
from semantica.normalize import EntityNormalizer
entity_normalizer = EntityNormalizer()
# 同一组织的多种名称变体
entity_variants = ["Apple Inc.", "Apple Inc", "Apple", "Apple Incorporated"]
normalized_entities = []
for entity in entity_variants:
# 按组织类型逐条规范化
normalized = entity_normalizer.normalize_entity(entity, entity_type="Organization")
normalized_entities.append(normalized)
print(f"{entity} -> {normalized}")
5步骤 3:日期规范化
将日期规范化为标准格式。
# 将多种日期写法规范化为标准格式
from semantica.normalize import DateNormalizer
date_normalizer = DateNormalizer()
# 不同风格的日期字符串
date_formats = ["2023-12-25", "12/25/2023", "December 25, 2023", "25 Dec 2023"]
for date_str in date_formats:
normalized = date_normalizer.normalize_date(date_str)
print(f"{date_str} -> {normalized}")
6步骤 4:数字规范化
规范化数字和数量。
# 规范化数字与数量表示(千分位、单位、百分比、科学计数法等)
import importlib
import semantica.normalize.number_normalizer
# 重新加载模块以确保使用最新实现
importlib.reload(semantica.normalize.number_normalizer)
from semantica.normalize import NumberNormalizer
number_normalizer = NumberNormalizer()
# 各种数字书写形式
numbers = ["1,000", "1.5M", "$100", "50%", "3.14e2"]
for num_str in numbers:
normalized = number_normalizer.normalize_number(num_str)
print(f"{num_str} -> {normalized}")
7步骤 5:数据清洗
使用 DataCleaner 清洗数据。
# 使用 DataCleaner 清洗记录并去除重复项
from semantica.normalize import DataCleaner
data_cleaner = DataCleaner()
# 含重复记录(前两条实为同一公司)的示例数据
data = [
{"name": "Apple Inc.", "value": 100},
{"name": "Apple Inc", "value": 100},
{"name": "Microsoft", "value": 200}
]
cleaned_data = data_cleaner.clean_data(data, remove_duplicates=True)
print(f"Original records: {len(data)}")
print(f"Cleaned records: {len(cleaned_data)}")
8步骤 6:语言检测与编码
检测语言并处理编码。
# 检测文本语言与字节编码,保证数据质量
from semantica.normalize import LanguageDetector, EncodingHandler
language_detector = LanguageDetector()
encoding_handler = EncodingHandler()
# 多语言文本样本
text_samples = [
"Hello, this is English text.",
"Bonjour, ceci est du texte français.",
"Hola, este es texto en español."
]
# 逐条检测语言
for text in text_samples:
detected_lang = language_detector.detect(text)
print(f"Text: {text[:30]}... -> Language: {detected_lang}")
# 检测字节串的编码
sample_bytes = "Hello World".encode('utf-8')
detected_encoding = encoding_handler.detect(sample_bytes)
print(f"\nDetected encoding: {detected_encoding}")
9小结
你已经学会了如何规范化和清洗数据:
- TextNormalizer:文本清洗和规范化
- EntityNormalizer:实体名称标准化
- DateNormalizer:日期格式规范化
- NumberNormalizer:数字和数量规范化
- DataCleaner:通用数据清洗
- LanguageDetector:语言检测
- EncodingHandler:编码检测与转换
下一步:在 Entity_Extraction notebook 中学习如何抽取实体。