Decomposition#

This tutorial is available as an IPython notebook at Malaya/example/topic-modeling-decomposition.

[1]:
import pandas as pd
import malaya
[2]:
df = pd.read_csv('tests/02032018.csv',sep=';')
df = df.iloc[3:,1:]
df.columns = ['text','label']
corpus = df.text.tolist()

You can get this file https://github.com/huseinzol05/malaya/blob/master/tests/02032018.csv . This csv already stemmed.

Load vectorizer object#

You can use TfidfVectorizer, CountVectorizer, or any vectorizer as long fit_transform method exists.

[3]:
from malaya.text.vectorizer import SkipGramCountVectorizer

stopwords = malaya.text.function.get_stopwords()
vectorizer = SkipGramCountVectorizer(
    max_df = 0.95,
    min_df = 1,
    ngram_range = (1, 3),
    stop_words = stopwords,
    skip = 2
)

Train SKLearn LDA model#

def fit(
    corpus: List[str],
    model,
    vectorizer,
    n_topics: int,
    cleaning=simple_textcleaning,
    stopwords=get_stopwords,
    **kwargs,
):
    """
    Train a SKlearn model to do topic modelling based on corpus given.

    Parameters
    ----------
    corpus: list
    model : object
        Should have `fit_transform` method. Commonly:

        * ``sklearn.decomposition.TruncatedSVD`` - LSA algorithm.
        * ``sklearn.decomposition.LatentDirichletAllocation`` - LDA algorithm.
        * ``sklearn.decomposition.NMF`` - NMF algorithm.
    vectorizer : object
        Should have `fit_transform` method. Commonly:

        * ``sklearn.feature_extraction.text.TfidfVectorizer`` - TFIDF algorithm.
        * ``sklearn.feature_extraction.text.CountVectorizer`` - Bag-of-Word algorithm.
        * ``malaya.text.vectorizer.SkipGramCountVectorizer`` - Skip Gram Bag-of-Word algorithm.
        * ``malaya.text.vectorizer.SkipGramTfidfVectorizer`` - Skip Gram TFIDF algorithm.
    n_topics: int, (default=10)
        size of decomposition column.
    cleaning: function, (default=malaya.text.function.simple_textcleaning)
        function to clean the corpus.
    stopwords: List[str], (default=malaya.texts.function.get_stopwords)
        A callable that returned a List[str], or a List[str], or a Tuple[str]

    Returns
    -------
    result: malaya.topic_model.decomposition.Topic class
    """
[4]:
from sklearn.decomposition import LatentDirichletAllocation

lda = malaya.topic_model.decomposition.fit(
    corpus,
    LatentDirichletAllocation,
    vectorizer = vectorizer,
    n_topics = 10,
)

Important sentences based on topics#

def get_sentences(self, len_sentence: int, k: int = 0):
    """
    Return important sentences related to selected column based on decomposition.

    Parameters
    ----------
    len_sentence: int
    k: int, (default=0)
        index of decomposition matrix.

    Returns
    -------
    result: List[str]
    """
[6]:
lda.get_sentences(5)
[6]:
['saya fikir berucaplah sekuat mana sekali pun tulislah sebanyak mana kertas cadangan tapi sekiranya rejim yang sama terus mentadbir negara perubahan tuntas yang kita mahukan mustahil akan terlaksana kerana political will itu tidak wujud',
 'kami telah menerima permohonan untuk menjadikan flat perumahan sedia ada menjadi bilik darjah tingkatan enam dan kementerian telah meluluskan peruntukan rm juta bagi projek tersebut',
 'kami menjual syarikat pajakan kami pagi ini dan wang yang diterima akan meningkatkan ringgit jadi ia akan mencerminkan dengan lebih baik lagi kekuatan sebenar dan daya tahan ekonomi malaysia',
 'kerajaan dan rakan sekerja saya menteri pengangkutan datuk seri liow tiong lai akan memastikan anda berkembang dan berjaya melampaui imaginasi kami',
 'kami menolak sebarang percubaan untuk merosak atau memusnahkan tanah suci dan akan menjaga tempat itu sebaik baiknya serta memberi tumpuan kepada kepentingan islam']

Get topics#

def get_topics(self, len_topic: int):
    """
    Return important topics based on decomposition.

    Parameters
    ----------
    len_topic: int

    Returns
    -------
    result: List[str]
    """
[7]:
lda.get_topics(10)
[7]:
[(0,
  'kerajaan hutang negara subjek mdb menerima islam kemudahan menjual takut'),
 (1,
  'negara selatan pembangunannya negara selatan negara projek malaysia pengalaman berkongsi berkongsi pengalaman selatan negara negara selatan'),
 (2,
  'parti pilihan raya raya pilihan perniagaan digital santan berjalan lancar lancar perlembagaan berjalan umno'),
 (3,
  'malaysia menteri rakyat perdana negara asli kerajaan perdana menteri rumah rakyat malaysia'),
 (4,
  'bahasa pertumbuhan negara malaysia ilmu parti bersatu kerajaan mdb pelbagai'),
 (5,
  'parti rakyat keputusan ahli mengambil awam masyarakat pru pendapatan kerajaan'),
 (6,
  'malaysia kerajaan rakyat masyarakat rakyat malaysia cina strategi kenyataan dasar hilang'),
 (7,
  'undi kerajaan dakwaan dana kenyataan bidang kementerian syarikat sebarang doj'),
 (8,
  'negara mdb kewangan syarikat negara bidang negara bidang perancangan negara maju negara maju perancangan membantu negara membantu negara bidang'),
 (9, 'malaysia harga ambil rm air usaha sabah anti dasar dijual')]
[ ]: