NeoSCA:句法復(fù)雜度分析器L2SCA的重寫版本

NeoSCA 使用說明
Windows 使用 python --version 不顯示版本號?
如果 Windows 用戶 python --version 不顯示版本號、也沒有其他提示的,打開系統(tǒng)設(shè)置,搜索 alias,找到應(yīng)用別名設(shè)置,關(guān)掉里面的 python.exe 和 python3.exe 的別名。然后在 powershell 里再試一下 python --version。
macOS 找不到 powershell?
在啟動(dòng)臺搜索并打開“終端”
macOS 使用 pip install neosca 顯示 command not found?
改成 pip3 install neosca
輸入文件
輸入文件可以是 .txt 或 .docx 或 .odt 文件。
之前版本的 NeoSCA 要求 .txt 文件是 utf-8 編碼,從 0.0.42 之后不需要一定是 utf-8,NeoSCA 會(huì)嘗試使用 utf-8 編碼讀取 .txt 文件,如果失敗再檢測 .txt 文件的編碼,然后用檢測到的編碼讀取 .txt 文件。
如果文件名包含空格
如果文件名包含空格,需要在兩邊加英文雙引號,比如分析 "sample 1.txt" 要用 `nsca "sample 1.txt"`,如果不加引號,NeoSCA 會(huì)認(rèn)為你輸入了兩個(gè)文件名,一個(gè)是 sample,另一個(gè)是 1.txt。
類似地,使用通配符批量分析,也需要在必要時(shí)使用引號。假設(shè)文件被命名為以下格式:

如果只分析 levelA 的語料,要用 `nsca "level A*.txt"`。如果不加引號 (`nsca level A*.txt`),NeoSCA 會(huì)認(rèn)為你輸入了兩組文件,一組是名為 level 的單個(gè)文件,另一組是所有以 A 開頭、以 .txt 結(jié)尾的文件。當(dāng)然,如果你要一次性分析所有文件,只需 `nsca *.txt` 即可,不需要使用引號,因?yàn)橥ㄅ浞?* 可以匹配空格。
標(biāo)點(diǎn)右側(cè)要有空格
如果輸入文件的標(biāo)點(diǎn)符號右側(cè)沒有空格,會(huì) (1) 導(dǎo)致 NeoSCA 運(yùn)行失敗,(2) 影響輸出結(jié)果的準(zhǔn)確性。
(1) 圖中文本 (https://pastebin.com/HzmmgtVx) 所有的 “.” 右側(cè)都沒有空格,NeoSCA 所調(diào)用的 Stanford Parser 會(huì)把它當(dāng)作一個(gè) 300 多詞的超長句子來分析,所占用的內(nèi)存超出了 1.5G 限制,導(dǎo)致報(bào)錯(cuò),報(bào)錯(cuò)被發(fā)送給 NeoSCA,NeoSCA 收到 Stanford Parser 的報(bào)錯(cuò)后退出。


使用 L2SCA (http://personal.psu.edu/xxl13/downloads/l2sca.html) 分析上圖文本,L2SCA 沒有報(bào)錯(cuò),但輸出結(jié)果的所有列均為0。

使用 Web-based L2SCA (https://aihaiyang.com/software/l2sca/single/) 分析上圖文本,出現(xiàn) 504 錯(cuò)誤。


(2) 如果 Stanford Parser 沒有超出內(nèi)存限制,NeoSCA 正常運(yùn)行,得到了 result.csv,該文件的 S(entences) 列的值會(huì)不準(zhǔn)確。對于上圖文本,S 列的值會(huì)是 1,這顯然不對。S 的錯(cuò)誤會(huì)進(jìn)而導(dǎo)致 MLS、C/S、T/S列的錯(cuò)誤。對于 “It was?quite?amazing,really.Isn't it?” 這個(gè)句子,雖然 “amazing” 和 “really” 可以被 Stanford Parser 識別為 2 個(gè)詞,但“really,Isn” 會(huì)被視作1個(gè)詞,而不是2個(gè),這又會(huì)導(dǎo)致 W、MLS、MLT、MLC 列的值的錯(cuò)誤。

所以在使用 NeoSCA 分析語料之前,請檢查語料是否存在“標(biāo)點(diǎn)右側(cè)無空格”的情況,若有,請手動(dòng)在其后添加1個(gè)空格。