Python – Spinning Chinese Version Application

簡介

在上一篇我們講述到了一些關於偽原創的Python Package,最快的方法是不需要自己寫Code,套用別人寫好的API,但是就是需要繳費,平均一個月也要1.2000塊台幣。所以我們就拿上一篇的套件來硬刻出一個最基本的偽原創中文版吧。

短句偽原創

!pip install jieba
!pip install synonyms

import jieba
import synonyms
from jieba import posseg as pseg

首先我們要先確切的確定短句可以進行偽原創,再來再去做整篇文章或是多篇文章的翻譯重置。先安裝Jieba 跟 synonym套件。並Import他們倆個。這裡要注意的是我們這篇要新增一個jieba中的modul,叫做『 posseg 』並命名為『 pseg 』讓程式可以直接使用。

article_text = "據中國官媒《環球時報》報導,一位「不願具名的軍事專家」受訪表示,「美國國防部長在五角大廈是天然的第一把手」,如果總統把防長換掉了,「那就意味著把基本政策換掉了」;雖然他認為目前中美間要發生軍事衝突的機率仍低,但「不排除川普會拿中國做文章,給拜登留下爛攤子,達到一石二鳥的目的」。"

words_tuple = pseg.lcut(article_text)
word_list = []

接著我們要新增一個容器裝載我們要測試的短句:

1.就先隨便上網找一句來應用,這邊就裝在『 article_text 』。

2.再來我們新增一個容器來裝載每一個透過『 pesg 』斷句斷詞斷出來的文字,叫做『 words_tuple 』。

3.最後我們新增一個陣列容器裝載未來我們轉換好的句子,叫做『 word_list 』。

for word, flag in words_tuple:
    if flag == 'a' or flag == 'ad' or flag == 'v':
        seg_list = (synonyms.nearby(word))[0]
        if len(seg_list) <= 1:
            word = word
        else:
            word = seg_list[1]
    word_list.append(word)
print("".join(word_list))

最後到了轉換的精髓了:

1.透過for-loop,來拆解被儲存在斷句斷詞容器中的『 words_tuple 』。

2.並透過判斷式來判斷每個斷詞單元詞性。

3.再透過『 synonym 』中的nearby方法轉換,再透過一個判斷式,假如有相似的詞就替換,沒有的話就用原本的詞。

4.而將轉換好的詞句堆疊在『 word_list 』中。

5.最後就印出轉換結果。

轉換前

據中國官媒《環球時報》報導,一位「不願具名的軍事專家」受訪表示,「美國國防部長在五角大廈是天然的第一把手」,如果總統把防長換掉了,「那就意味著把基本政策換掉了」;雖然他認為目前中美間要發生軍事衝突的機率仍低,但「不排除川普會拿中國做文章,給拜登留下爛攤子,達到一石二鳥的目的」。

轉換後

據中國官媒《環球時報》報導,一位「不願透露消息的軍事專家」受訪则表示,「美國國防部長在五角大廈就是天然的第一把手」,如果總統把防長換掉了,「那就意味著把基本政策換掉了」;雖然他認為目前中美間要發生軍事衝突的機率仍高,但「不确定川普會拎中國做文章,給拜登遗留下爛攤子,達到一石二鳥的目的」。

實際轉換畫面

如此一來,透過『 Jieba + synonym 』,就刻出了簡單的偽原創單句翻譯。

整篇偽原創

假如我們本機端有超多的文擋需要做偽原創,當然就不可能一句一句透過上個段落的段落翻譯,這樣會累死,所以就必須再透過程式來讓他自動化。

import os, re

我們這邊要多Import os, re,用來進行本機端的檔案處理程序套件。

def Scan():
    dir_list = os.listdir('./old_txt/')
    return dir_list

這邊我們要新增數個『 def 』,就是類似C#的 『 class 』,自創自己的類別。而上面功用是在掃描資料夾(指定路徑)的文檔。最後呼叫該類別後會得到檔案的完整路徑。

def Read(path):
    with open('./old_txt/' + path, 'r', encoding='utf-8') as f:
        content = f.read()
    title_list = re.findall('<title=(.*?)>', content)
    title = title_list[0] if len(title_list) != 0 else None
    article_list = re.findall('<neirong=([\s\S]*)>', (content.replace('\n', '')).replace('<p>', ''))
    article = article_list[0] if len(article_list) != 0 else None
    words_list = []
    string_list = article.split('</p>')
    for string in string_list:
        if string != '':
            words_list.append(string)
    if title is not None and len(words_list) > 0:
        return title, words_list
    else:
        return None, None

該類別是在讀取路徑中的『所有』檔案:

1.所以這邊我們就使用with open()來依序打開文件。並透過『 content 』容器來儲存所有文字檔。

2.而這邊的文字檔是html格式,所以會有幾個標籤可以讓我們找到『 tittle 』標題、『 p 』內文,找到後把『<tittle> , <p>』標籤拿掉,並透過兩個容器來儲存title與article。

3.經過for-loop把內文儲存在分詞陣列『 word_list 』中,以便後面換詞使用。

4.而最後判斷假如title , word_list不是空的就回傳這兩個值,反之則返回空值。

def write(path,content):
    with open('./new_txt/' + path, 'a+', encoding='utf-8') as f:
        f.write(content)

該類別是在重新寫入新文字檔,並儲存在指定路徑,首先就要新增兩個屬性,讓之後引用的填入『 path(路徑) , content(內文) 』,成功後則儲存檔案。

dir_list = Scan()
    for path in dir_list:
        title, words_list = Read(path)
        if title is not None and words_list is not None:
            title = words_change(title)
            write(path,'<title={}>'.format(title) + '\n')
            write(path,'<neirong=')
            for words in words_list:
                word = words_change(words)
                write(path,'\n<p>' + word + '</p>' + '')
            write(path,'>')

而在貼上上面程式碼之前,我們中間要穿插剛剛第一段短篇句子的測試程式碼,接著再貼上上面的執行功能的程式碼。

1.我們有新增一個容器裝著透過『Scan()』回傳的path。

2.我們知道這個功能是要轉換很多篇文章的本機檔案,所以就要使用回圈來讓他們自動全部跑完。透過path的數量來執行次數。

3.接著我們要將檔案路徑丟進『 Read(path)』來取得單一檔案的『title , content』

title = words_change(title)
            write(path,'<title={}>'.format(title) + '\n')

4.而假如title , content不是None的話,就開使寫入檔案,上面的程式碼有個叫做『words_change(title)』,我們會先處理title,再來會處理內文。而一樣要寫入html代碼『<title>』。

write(path,'<neirong=')
            for words in words_list:
                word = words_change(words)
                write(path,'\n<p>' + word + '</p>' + '')
            write(path,'>')

5.最後相同於title寫入方式一樣,但是內文通常會有很多詞句,所以就要透過for-loop來每句每句的內容。如此一來就完成了多篇文章偽原創。

小結

多篇偽原創結果如上圖,假如文章有很多篇,可能要run一陣子。這篇我們拆解了短句偽原創與整個文字檔偽原創的段落,而主要的精髓在第一段,透過Jieba + synonym,這是重點要講三次,在未來可以在找更多適合的套件讓整個偽原創的轉換文字更多樣化,轉得更順,與本文更不同,亦可測試一下付費API,跟本篇的偽原創轉換後的效果比較一下。

在〈Python – Spinning Chinese Version Application〉中有 1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *