Pythonのコードを実装句読点、ストップワードに、POSタグ付け&フィルタへの単語を含む中国語のテキストを処理する自然言語の使用。
各モジュールの先頭では、その実装を紹介します。最後に、テキスト全体がTextProcessプロセスクラスにパッケージ化されます。
どもっ単語
jiebaは、その前に、必要より良い中国のシソーラスポイントですpip install jieba
どもっ言葉は3つのモードがあります。
- フルモード:文章中の単語に入れることができるすべての単語がスキャンされます
jieba.cut(text, cut_all=True)
- 精密モード:最も正確にカットの文は、テキスト分析をフィット
jieba.cut(text, cut_all=False) # 默认模式
- エンジンモードを検索:長期的な再分割の正確なモードに基づいて、検索エンジンの単語に適し
jieba.cut_for_search(txt)
下に示すように、分割結果の三種類:
の詳細についてjieba 3つのモードは、参照してください詳細な説明。私はそれをしなければならないので、テキスト分析であるので、選択肢はデフォルトファインモードです。
そのような「チキン」などのいくつかの単語については、jiebaはしばしば、「食べる」と「鶏」にそれらを分割しますが、それを行う方法である、それらを分離する必要はほとんどありませんか?カスタム辞書をロードする必要があります。この時間dict.txtを。文書の設立は、「鶏」を追加した、次のコードを実行します。
file_userDict = 'dict.txt' # 自定义的词典
jieba.load_userdict(file_userDict)
コントラストの図の効果:
スピーチのタグ付け
posseg単語の後、結果は、以下を含む、値の対である単語とのフラグを使用することができるため、ループ取得。演説で中国の表を参照してくださいスピーチタグ付けテーブルを
import jieba.posseg as pseg
sentence = "酒店就在海边,去鼓浪屿很方便。"
words_pair = pseg.cut(sentence)
result = " ".join(["{0}/{1}".format(word, flag) for word, flag in words_pair])
print(result)
これに基づき、我々は、音声の特定の部分にのみ言葉を残し、さらに音声フィルタを行うことができます。まず、tag_filterあなたがままにしたい言葉を示し、その後、各単語、品詞をタグ付けPOSのための文の後に、会った場合に追加リストに。ここだけ名詞と動詞を保持しました。
import jieba.posseg as pseg
list = []
sentence = "人们宁愿去关心一个蹩脚电影演员的吃喝拉撒和鸡毛蒜皮,而不愿了解一个普通人波涛汹涌的内心世界"
tag_filter = ['n', 'v'] # 需要保留的词性
seg_result = pseg.cut(sentence) # 结果是一个pair,有flag和word两种值
list.append([" ".join(s.word for s in seg_result if s.flag in tag_filter)])
print("词性过滤完成")
print(list)
単語を停止するには
単語を停止するときは、最初はストップリスト、共通に使用するHITストップリストとBaiduのストップリストを、インターネットを簡単にダウンロードすることができます。
最初を通じて、ストップワードに行く前にload_stopword()ストップワード方式のリストをロードするために、その後、上記に従って、ワード文章の負荷カスタム辞書、および文が単語内の各単語の後に決定され、ストップリストの中かどうか、そうでない場合は、それは参加置くoutStrをスペースで区別、。
import jieba
# 加载停用词列表
def load_stopword():
f_stop = open('hit_stopwords.txt', encoding='utf-8') # 自己的中文停用词表
sw = [line.strip() for line in f_stop] # strip() 方法用于移除字符串头尾指定的字符(默认为空格)
f_stop.close()
return sw
# 中文分词并且去停用词
def seg_word(sentence):
file_userDict = 'dict.txt' # 自定义的词典
jieba.load_userdict(file_userDict)
sentence_seged = jieba.cut(sentence.strip())
stopwords = load_stopword()
outstr = ''
for word in sentence_seged:
if word not in stopwords:
if word != '/t':
outstr += word
outstr += " "
print(outstr)
return outstr
if __name__ == '__main__':
sentence = "人们宁愿去关心一个蹩脚电影演员的吃喝拉撒和鸡毛蒜皮,而不愿了解一个普通人波涛汹涌的内心世界"
seg_word(sentence)
ゴー句読点
導入再使用、パッケージ、定義された句読点サブ()交換の方法。
import re
sentence = "+蚂=蚁!花!呗/期?免,息★.---《平凡的世界》:了*解一(#@)个“普通人”波涛汹涌的内心世界!"
sentenceClean = []
remove_chars = '[·’!"#$%&\'()#!()*+,-./:;<=>?@,:?★、….>【】[]《》?“”‘’[\\]^_`{|}~]+'
string = re.sub(remove_chars, "", sentence)
sentenceClean.append(string)
print(sentence)
print(sentenceClean)
最終的なコード
最後に、にそれらをカプセル化し、上記TextProcessのクラス。filePathにはfileSegDonePathの後処理を保存する、テキストの先頭の位置が処理されることになります。
アイデアは最初に加工するラインによってテキスト行保存することですfileTrainReadのリストを、そして2つのオプションがあります。
-
ロードストップリスト、それは、ストップワードとワード操作に行わに保存word_list_segのリスト。
-
それとも、関係なく、単語と単語の無効化を選択することができますが、直接の文章から必要な発言を抽出し、[保存するword_list_posのリスト。
スピーチのフィルタストップワードと部品は、文の句読点を削除するために行われているので、そのクラスには、句読点の除去が含まれていません。最後に、文書に書かれた文との良好な取引。
import jieba
import jieba.posseg as pseg
class TextProcess(object):
def __init__(self, filePath, fileSegDonePath):
self.filePath = filePath # 需要处理的文本位置
self.fileSegDonePath = fileSegDonePath # 处理完毕后的保存位置
self.fileTrainRead = [] # 所有行保存到该列表
self.stopPath = "hit_stopwords.txt" # 自己所用的停用词表位置
self.word_list_seg = [] # 分词及去停用词后保存的列表
self.word_list_pos = [] # 词性过滤后保存的列表
# 将每一行文本依次存放到一个列表
def saveLine(self):
count = 0 # 统计行数
with open(self.filePath, encoding='utf-8') as fileTrainRaw:
for index, line in enumerate(fileTrainRaw):
self.fileTrainRead.append(line)
count += 1
print("一共有%d行" % count)
return self.fileTrainRead
# 加载停用词表
def load_stopword(self):
f_stop = open(self.stopPath, encoding='utf-8') # 自己的中文停用词表
sw = [line.strip() for line in f_stop] # strip() 方法用于移除字符串头尾指定的字符(默认为空格)
f_stop.close()
return sw
# 分词并且去停用词,与下一个词性过滤方法选择一个即可
def segLine(self):
file_userDict = 'dict.txt' # 自定义的词典
jieba.load_userdict(file_userDict)
for i in range(len(self.fileTrainRead)):
sentence_seged = jieba.cut(self.fileTrainRead[i].strip())
stopwords = self.load_stopword()
outstr = ''
for word in sentence_seged:
if word not in stopwords:
if word != '/t':
outstr += word
outstr += " "
self.word_list_seg.append([outstr])
print("分词及去停用词完成")
return self.word_list_seg
# 保留特定词性
def posLine(self):
for i in range(len(self.fileTrainRead)):
tag_filter = ['n', 'd', 'a', 'v', 'f', 'ns', 'vn'] # 需要保留的词性 d-副词 f-方位词 ns-地名 vn-名动词
seg_result = pseg.cut(self.fileTrainRead[i]) # 结果是一个pair,有flag和word两种值
self.word_list_pos.append([" ".join(s.word for s in seg_result if s.flag in tag_filter)])
print("词性过滤完成")
return self.word_list_pos
# 处理后写入文件
def writeFile(self):
with open(self.fileSegDonePath, 'wb') as fs:
for i in range(len(self.word_list_seg)): # 选择去停用词方法
fs.write(self.word_list_seg[i][0].encode('utf-8'))
fs.write('\n'.encode("utf-8"))
'''
for i in range(len(self.word_list_pos)): # 选择词性过滤方法
fs.write(self.word_list_pos[i][0].encode('utf-8'))
fs.write('\n'.encode("utf-8"))
'''
if __name__ == '__main__':
tp = TextProcess('ex.txt', 'final.txt')
tp.saveLine() # 将每一行文本依次存放到一个列表
tp.load_stopword() # 加载停用词表
tp.segLine()
# tp.posLine()
tp.writeFile()
元のテキスト(クロールデータのクチコミ一部):
様々な条件は、股関節のライブ中の家の側の窓外にはない良い、であり、後に除湿機付き。
特に良い場所、簡単にアクセスでき、ホテルのフロントデスク、コンシェルジュサービスが特に良いです。
歩行者専用道路の交差点で、良い場所。ホテルのサービスは非常に良いです。
ホテルでは、すべての面で非常に良いです。「ジム」は本当に短いボードです。あまりにも全体のイメージに影響
ホテルは山の歩行ブロックでは非常に良いですが、駐車場の旅行は非常に便利です。
朝食の多様性は、スタッフは非常に暖かいです、海の見える部屋は、夜コロンスかなり良いを見ることができます!
豊富な朝食、旅行の利便性!
単語メソッドの動作を停止することを選択します:
ヒップの家のないアウトサイドウィンドウは、後に除湿機の条件は住むために良いではない時に
ホテルのフロントに位置特に便利なアクセス、コンシェルジュサービス、特に優れている
横断歩道の位置素敵なホテルのサービスは非常に良い
ホテルのジムは非常に良い確かにあまりにも全体的なショートボードに影響を与えています画像の
位置の良い中山路歩行者の旅行は非常に便利な駐車場のブロックで
朝食品種は、スタッフがコロンスかなり良いの夜景を見るために非常に暖かいオーシャンビューの部屋のある
便利な旅行での豊富な朝食を
音声フィルタの選択方法は動作します:
条件が住んでいるということであるヒップ除湿機の家のないアウトサイドウィンドウ
の特別なアクセス便利なホテルのフロントデスクのコンシェルジュサービスの位置が特に優れている
通り、ロケーションの良いホテルのサービスを歩くには非常に良いもされていない
ホテルは非常に良いジムが、全体のイメージに影響を与える本当にショートボードです
場所中山路歩行街の駐車トリップ
朝食品種の熱意海の見える部屋のスタッフは夜コロンスかなり良い見ることができる
便利な旅行で豊富な朝食を
これが結論します!^ O ^ Y