NLP 실천 2-언어 처리 기술

16705 단어 nlp 학습
기본 텍스트 처리 기능:중 영문 문자열 처리(관련 되 지 않 은 문 자 를 삭제 하고 단 어 를 사용 하지 않 음);말 을 더듬다.단어,문자 주파수 통계.언어 모델;유 니 그램,bigram,trigram 주파수 통계.더듬더듬
1.중 영문 문자열 처리
#    apply      
def word_clear(s):
    words=''
    for uchar in  s:
        #        
        if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
            words+=uchar
        #        
        if uchar >= u'\u0030' and uchar <= u'\u0039':
            words+=uchar
        #          
        if (uchar >= u'\u0041' and uchar <= u'\u005a') or (uchar >= u'\u0061' and uchar <= u'\u007a'):
            words+=uchar
        else:
            continue
            
    return words

2.중국어 말 더 듬 기
import jieba

#   
#                  ,   ,      

sent='         '
wordlist=jieba.cut(sent,cut_all=True)
print('|'.join(wordlist))
#    |  |  |    |  

#    
#            
wordlist=jieba.cut(sent,cut_all=False)
print(','.join(wordlist))

#    ,  ,    

#      
#                ,     
wordlist=jieba.cut_for_search(sent)
print('.'.join(wordlist))
#    .  .  .  .    


#       ,
         .txt  utf-8
     100 n
    100 n

jieba.load_userdict('E:\\professional_software\\anaconda\\Lib\\site-packages\\jieba\\userdict.txt')

sent='                '
wordlist=jieba.cut(sent)
print(' '.join(wordlist))

단어,문자 주파수 통계.
from collections import  Counter
import pandas  as pd


df=pd.DataFrame({'title':[1,2],'content':['     ','          ',]})


def get_word_frequence(words):
    all_word=[]
    for i in words:
         cut_words=jieba.cut(i)
         for uchar in  cut_words:
             all_word.append(uchar)
    print(all_word)
    a=Counter(all_word)
    a=a.most_common(len(all_word))
    key,value=zip(*a)
    key=list(key)
    value=list(value)
    dic={ key[i]:value[i] for i in range(len(key))}
    return dic

l=get_word_frequence(df['content'].values)
print(l)

유 니 그램,bigram,trigram 주파수 통계.
n-gram 은 통계 언어 모델 을 바탕 으로 하 는 알고리즘 이다.자연 언어 처리 에서 우 리 는 n 원 문법 모델 을 자주 사용 해 야 한다.n-gram N 번 째 단어의 등장 은 앞의 N-1 단어 와 만 관련 되 고 다른 어떤 단어 와 도 관련 이 없 으 며 전체 문장의 확률 은 각 단어 가 나타 날 확률 의 곱 이다.이런 확률 은 어휘의 N 개 단어 가 동시에 나타 나 는 횟수 를 직접 집계 해 얻 을 수 있다.그 중에서 중국어 단어 와 관련 된 일부 개념 은 우리 가 파악 해 야 할 것 이다.예 를 들 어 유 니 그램 1 원 단 어 는 문장 을 하나의 한자 로 나 누고 모든 단어 간 에 관련 관계 가 없다.bigram 이원 단 어 는 문장 을 처음부터 끝까지 두 글자 로 하나의 단 어 를 구성 하고 현재 단 어 는 앞의 단어 와 만 관계 가 있다.trigram 3 원 단 어 는 문장 을 처음부터 끝까지 세 글자 로 하나의 단 어 를 구성 하 는데 현재 단 어 는 앞의 두 단어 와 만 관계 가 있다.
end
다음은 sklearn 의 라 이브 러 리 를 직접 사용 하여 통계 합 니 다.

# ram_range=(1,1)    unigram, ngram_range=(2,2)    bigram, ngram_range=(3,3)    thirgram
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import jieba

data = ["  china,    ,    !    !",
        "  :         ",
        "     ,      "]
data = [" ".join(jieba.lcut(e)) for e in data]         #   ,  " "  
vector = CountVectorizer(min_df=1, ngram_range=(2,2))  # bigram
X = vector.fit_transform(data)                         #             
print(vector.vocabulary_ )                             #     
print(X)                                               #(    ,       )     
df1 = pd.DataFrame(X.toarray(), columns=vector.get_feature_names()) # to DataFrame
df1.head()

#tfidf
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
corpus = ["This is sample document.", "another random document.", "third sample document text"]
vector = TfidfVectorizer()
tf_data = vector.fit_transform(corpus)
print(tf_data)    #(    ,       )     
print(vector.vocabulary_)    #    
df1 = pd.DataFrame(tf_data.toarray(), columns=vector.get_feature_names())

print(df1)

좋은 웹페이지 즐겨찾기