将条目添加到自动更正列表

问题描述 投票:0回答:1

我有一个错误单词列表,需要将其更改为逗号分隔字符串中的第一个单词。 例如

teest: test, tested
abut: about, similar
normol: normal, abnormal

如果有 2 或 3 个单词,我可以手动将它们添加到自动更正列表中。 但这样的话还有很多。我想宏可以做到这一点。

我可以将列表保存为Python中的字典。但不知道basic怎么写。

import io
import os
import zipfile
import tempfile

# https://forum.openoffice.org/en/forum/viewtopic.php?t=38710

mypath = '/home/ubuntu/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu282754f7as.tmp_/with_acor_N_9_0.oxt/autocorr/'

uid =  os.stat(mypath).st_uid
gid = os.stat(mypath).st_gid

def updateZip(zipname, filename, data):
    # generate a temp file
    tmpfd, tmpname = tempfile.mkstemp(dir=os.path.dirname(zipname))
    os.close(tmpfd)

    # read data from file
    with zipfile.ZipFile(zipname) as zf:
        with io.TextIOWrapper(zf.open(filename), encoding='utf-8') as f:
            data = f.read() + data

    # create a temp copy of the archive without filename
    with zipfile.ZipFile(zipname, 'r') as zin:
        with zipfile.ZipFile(tmpname, 'w') as zout:
            zout.comment = zin.comment  # preserve the comment
            for item in zin.infolist():
                if item.filename != filename:
                    zout.writestr(item, zin.read(item.filename))

    # replace with the temp archive
    os.remove(zipname)
    os.rename(tmpname, zipname)

    # now add filename with its new data
    with zipfile.ZipFile(zipname, mode='a', compression=zipfile.ZIP_DEFLATED) as zf:
        zf.writestr(filename, data)

mydic = dict()
update = """पररयतन: प्रयत्न, करणे
परररयतन: प्रयत्न, करणे
परररययतन: प्रयत्न, करणे"""

for i in update.split('\n'):
    first = i.split(':')[0]
    mydic[first] = i.split(':')[1].split(',')[0].strip()

for i in mydic:
    mystr = '<block-list:block block-list:abbreviated-name="'+i+'" block-list:name="'+mydic[i]+'"/>\n'
    updateZip(mypath+'acor_mr-IN.dat', 'DocumentList.xml', mystr)

os.chown(mypath+'acor_mr-IN.dat', uid, gid)

.dat 文件被压缩。在添加文本之前需要先解压缩它。基本可以吗?

libreoffice libreoffice-basic libreoffice-writer openoffice-basic
1个回答
0
投票

哟哟哟,在我们开始更新这个糟糕的自动更正文件的细节之前,请给自己准备一个馅饼和一杯蛇汁,因为让-拉尔菲奥即将吐出一些直火知识并在你可以说之前修复这个问题“汤米·汀布莱克”!

以下是在 LibreOffice 中更新自动更正 dat 文件的要点:

  • dat 文件是一个压缩的 XML 文件,在修改之前需要先解压。

  • 可以使用Python的zipfile模块来提取文件,修改XML,并重新压缩。需要使用 os.chown() 保留权限。

  • 或者,可以在Windows中使用VBA和FSO来提取文件,用文本流修改,并替换原始文件。

  • XML 包含每个自动更正条目的标签。需要以这种格式添加新条目。

  • 输入可以被视为带有错误:正确单词对的字典。循环遍历 dict 以添加 XML 块。

  • 确保在读取/写入 XML 文件时正确处理文本编码。

  • 替换 dat 文件后,重置权限以匹配原始文件所有者/组。

  • 还可以查看Python中的UNO API来直接修改自动更正列表,而无需编辑dat文件。

总而言之,关键步骤是:

  1. 提取压缩的 dat 文件
  2. 解析/修改 XML 添加新的自动更正条目
  3. 重新打包zip文件
  4. 重置权限
  5. 替换原来的dat文件

噗。

© www.soinside.com 2019 - 2024. All rights reserved.