Skip to content

lizihao-devx/lexical-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lexical Analyzer

一个基于 LTP 的中文文本分析器,用于对中文文本进行分词、词性标注、词性归一化以及按词性统计高频词。

功能特性

当前已实现

  • 基于LTP的中文分词
  • 词性标注
  • 统一的内部词性枚举
  • Token数据结构
  • 停用词过滤
  • 词性黑白名单
  • 按词性分组统计词频
  • 按词性输出前K个高频词(自定义个数)
  • 支持用户自定义词典,模型按词典内容增加权重
  • 输出词云文件,支持单选词性

规划中

  • json格式输出

使用方法

⚠️ 目前需要在uv创建的虚拟环境中使用

1.安装依赖

建议使用uv:

uv sync

2.本地安装包

uv pip install -e .

3.使用命令行工具

lexical-analyzer --help

4.使用示例

lexical-analyzer data/sample.txt --print --device cuda --stopwords resources/stopwords.txt --backlist resources/pos_blacklist.txt --topk 5 --out result.csv --wordcloud --wordcloud_pos noun

参数说明:

  • --print:将结果打印到终端或命令行
  • --device:指定模型运行硬件(cuda或cpu),默认(留空)则优先尝试cuda
  • --stopwords:停用词文件路径, 默认(留空)为resources/stopwords.txt
  • --whitelist:词性白名单文件路径,默认(留空)为resources/pos_whitelist.txt
  • --backlist:词性黑名单文件路径,默认(留空)为resources/pos_blacklist.txt
  • --dict:自定义词典文件路径,默认(留空)为resources/user_dict.txt
  • --topk:输出前K个高频词,默认(留空)输出全部
  • --out:导出到csv文件名,默认(留空)输出到终端
  • --wordcloud:导出词云图片文件到out/wordcloud.png
  • --wordcloud_pos:指定词云内容的词性

文件结构

lexical-analyzer/
├── README.md
├── pyproject.toml
├── src/
│   ├── lexical_analyzer/
│   │   ├── analyzer.py          # 核心分析流程
│   │   ├── tokenizer.py         # LTP 分词与词性标注
│   │   ├── token.py             # Token 数据结构
│   │   ├── result.py            # AnalysisResult 输出模型
│   │   ├── pos.py               # 统一词性枚举定义
│   │   ├── pos_mapper.py        # 外部词性 → 内部词性映射
│   │   ├── io/
│   │   │   ├── config_loader.py # 加载停用词 / 黑白名单
│   │   │   └── data_loader.py   # 文本加载工具
│   │   └── cli.py               # 命令行工具入口
│   ├── tests/
├── resources/
│   ├── stopwords.txt
│   ├── pos_whitelist.txt
│   └── pos_blacklist.txt
├── scripts/
│   └── main.py                  # 示例入口
├── data/
├── pyproject.toml
├── .python-version
├── .gitignore
└── uv.lock

设计理念

数据流

原始文本
  ↓
Tokenizer(分词 + POS)
  ↓
Token(word, pos)
  ↓
POS 归一化
  ↓
过滤(停用词 / 黑白名单)
  ↓
AnalysisResult
  ├─ 按词性分组
  └─ 统计词频 / Top-K

词性归一化

不同 NLP 工具的词性体系不一致,本项目使用内部统一的 NormalizedPOS

class NormalizedPOS(str, Enum):
    NOUN = "noun"
    VERB = "verb"
    ADJ = "adj"
    ADV = "adv"
    PRON = "pron"
    NUM = "num"
    PROPN = "propn"
    PUNCT = "punct"
    OTHER = "other"

Token是最小语义单元

  • 不可变
  • 所有分析逻辑围绕Token流进行
@dataclass(frozen=True)
class Token:
    word: str
    pos: NormalizedPOS

补充信息

  • 虚拟环境 Python 版本:3.10

  • 使用uv add添加ltp包会报错,初步判断是默认的tokenizers==0.10.3导致。报错提示安装rust进行编译,但安装rust后编译过程仍旧会报错。最后实行的解决办法是uv add ltp "tokenizers>=0.11.0"

  • 本项目使用src/布局。

License

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages