LogoDuyệtSr. Data Engineer
HomeAboutPhotosInsightsCV

Footer

Logo

Resources

  • Rust Tiếng Việt
  • /archives
  • /series
  • /tags
  • Status

me@duyet.net

  • About
  • LinkedIn
  • Resume
  • Projects

© 2026 duyet.net | Sr. Data Engineer | 2026-02-27

vnTokenizer trên PySpark

Note: This post is over 10 years old. The information may be outdated.

vnTokenizer của tác giả Lê Hồng Phương ở phiên bản thứ 3 (vn.vitk) này được build trên Apache Spark, cho phép xử lý dữ liệu lớn. vn.vitk hỗ trợ các tác vụ: Word segmentation, Part-of-speech tagging, Dependency parsing.

Tuy nhiên vn.vitk được viết trên Java và sử dụng như một công cụ command line tools, khó tùy chỉnh và sử dụng dạng programming:

./bin/spark-submit ~/vitk/target/vn.vitk-3.0.jar -m <master-url> -i <input-file> -o <output-file> -v

Trong blog này mình sẽ custom lại vn.vitk để có thể chạy như một thư viện lập trình, sử dụng ngôn ngữ python (trên PySpark và Jupyter Notebook).
Xem qua bài viết về cách sử dụng Jupyter Notebook với Apache PySpark: Chạy Apache Spark với Jupyter Notebook

PySpark sử dụng py4j để gọi trực tiếp các thư viện Spark trên Scala/Java. Vì vậy chúng ta hoàn toàn có thể import các hàm của vn.vitk trên Python.

Chú ý:

  1. Để custom mã nguồn của vn.vitk, clone project tại đây: https://github.com/phuonglh/vn.vitk, cài đặt trước Java và Maven
  2. Bạn hoàn toàn có thể sử dụng file vn.vitk-3.0.jar mình đã build sẵn tại đây mà không cần đọc các bước modified bên dưới. Sử dụng file jar này để submit vào PySpark.

1. vn.vitk.tok.Tokenizer

Với vn.vitk.tok.Tokenizer, Class này chỉ có Constructor với tham số String sparkMaster (link), địa chỉ của Spark Master. Mình muốn truyền trực tiếp Spark Context từ PySpark vào, thêm vào file vn.vitk/src/main/java/vn/vitk/tok/Tokenizer.java

public Tokenizer(JavaSparkContext _jsc, String lexiconFileName, String regexpFileName) {
    jsc = _jsc;
    lexicon = new Lexicon().load(lexiconFileName);
    if (verbose) {
        System.out.println("#(nodes of the lexicon) = " + lexicon.numNodes());
        List<String> lines = jsc.textFile(regexpFileName).collect();
        for (String line : lines) {
            line = line.trim();
            if (!line.startsWith("#")) {
                // ignore comment lines
                String[] s = line.split("\\s+");
                if (s.length == 2) {
                    patterns.put(s[0], Pattern.compile(s[1]));
                }
            }
        }
    }
}

Xem file hoàn chỉnh tại đây: https://github.com/duyet/vn.vitk/.../java/vn/vitk/tok/Tokenizer.java

Build lại project bằng lệnh: mvn compile package, sau khi build thành công file vn.vitk-3.0.jar sẽ nằm trong thư mục target.

Submit PySpark và code

Submit vn.vitk-3.0.jar bằng lệnh:

export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --NotebookApp.open_browser=False --NotebookApp.ip='*' --NotebookApp.port=8880"
export SPARK_HOME=~/spark-1.6.2-bin-hadoop2.6 # Path to home of Spark
pyspark --master local --jars=./lib/vn.vitk-3.0.jar --driver-class-path=./lib/vn.vitk-3.0.jar

Tham khảo thêm về Notebook PySpark trong bài viết sau: Chạy Apache Spark với Jupyter Notebook
Mở Jupyter notebook trên trình duyệt và code mẫu theo notebook sau:

https://gist.github.com/duyet/e1f8122a015b300456ece1b4f92c69f1

Kết quả:

https://gist.github.com/duyet/9252f98405738ac63d5d8fd034866dac

Bạn có thể xem toàn bộ mã nguồn, input và output mẫu tại đây: https://github.com/duyet/pyspark-vn.vitk

Tham khảo

  1. https://github.com/phuonglh/vn.vitk
  2. https://github.com/duyet/pyspark-vn.vitk
Dec 14, 2016·9 years ago
|Data Engineering|
Data EngineeringPythonApache SparkNlpMachine Learning
|Edit|

Related Posts

Spark: Convert Text (CSV) to Parquet để tối ưu hóa Spark SQL và HDFS

Lưu trữ dữ liệu dưới dạng Columnar như Apache Parquet góp phần tăng hiệu năng truy xuất trên Spark lên rất nhiều lần. Bởi vì nó có thể tính toán và chỉ lấy ra 1 phần dữ liệu cần thiết (như 1 vài cột trên CSV), mà không cần phải đụng tới các phần khác của data row. Ngoài ra Parquet còn hỗ trợ flexible compression do đó tiết kiệm được rất nhiều không gian HDFS.

Sep 21, 2016·9 years ago
Read more

Phân lớp văn bản

Trong Machine Learning và NLP, phân lớp văn bản là một bài toán xử lí văn bản cổ điển, gán các nhãn phân loại lên một văn bản mới dựa trên mức độ tương tự của văn bản đó so với các văn bản đã được gán nhãn trong tập huấn luyện.

Aug 11, 2017·9 years ago
Read more

Cài Apache Spark standalone bản pre-built

Mình nhận được nhiều phản hồi từ bài viết BigData - Cài đặt Apache Spark trên Ubuntu 14.04 rằng sao cài khó và phức tạp thế. Thực ra bài viết đó mình hướng dẫn cách build và install từ source.

May 31, 2017·9 years ago
Read more

Chạy Apache Spark với Jupyter Notebook

IPython Notebook là một công cụ tiện lợi cho Python. Ta có thể Debug chương trình PySpark Line-by-line trên IPython Notebook một cách dễ dàng, tiết kiệm được nhiều thời gian.

Sep 20, 2016·9 years ago
Read more
On this page
  • 1. vn.vitk.tok.Tokenizer
  • Submit PySpark và code
  • Tham khảo
On this page
  • 1. vn.vitk.tok.Tokenizer
  • Submit PySpark và code
  • Tham khảo