NLP 실천 2-언어 처리 기술
16705 단어 nlp 학습
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)