鱼C论坛

 找回密码
 立即注册
查看: 2017|回复: 4

[已解决]langid 有时不能判断中英文,咋回事? 有靠谱的方法区分中英文句子吗?

[复制链接]
发表于 2023-4-19 16:20:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re
import langid
import string
from zhon.hanzi import punctuation as cn_punctuation


sentence_without_punctuation = """Can sleep says Big Pig."""
#sentence_without_punctuation = "English"
#sentence_without_punctuation = """apple"""

print(sentence_without_punctuation)

if str(langid.classify(sentence_without_punctuation)[0]) == 'en':
    print(sentence_without_punctuation + 'en')


elif str(langid.classify(sentence_without_punctuation)[0]) == 'zh':
    print(sentence_without_punctuation + 'cn')

else:
    print('unknown, maybe 汉语标点用在英文中了')

bug11.jpg
最佳答案
2023-4-19 16:43:31
blackantt 发表于 2023-4-19 16:35
装不了,要用其他方法?

要折腾一下编译环境,如果你的电脑上没有C++编译环境的话,安装完Protobuf编译器可能还要折腾一下C++的编译环境

从您提供的错误信息来看,您需要先安装 Protobuf 编译器(protoc),因为它是构建 pycld3 的必需工具。您可以按照以下步骤进行安装:

对于 Windows 用户:

  • 访问 Protobuf 的发布页面:https://github.com/protocolbuffers/protobuf/releases
  • 在页面中找到与您的系统兼容的最新版本(如 protoc-3.x.x-win64.zip),并下载 ZIP 文件。
  • 解压 ZIP 文件,并将 bin 文件夹添加到您的系统环境变量 PATH 中。


然后,您可以再次尝试安装 pycld3:
pip install pycld3

如果您仍然无法安装 pycld3,可以尝试使用另一个方法来区分中英文句子,例如使用 fasttext。首先,安装 fasttext 库:
pip install fasttext

然后,您需要下载一个预训练的语言识别模型。您可以从这里下载:https://dl.fbaipublicfiles.com/f ... -models/lid.176.bin

使用以下代码替换您现有的代码:
import re
import fasttext
import string
from zhon.hanzi import punctuation as cn_punctuation

# 加载预训练的模型
model = fasttext.load_model("lid.176.bin")

sentence_without_punctuation = "Can sleep says Big Pig."

print(sentence_without_punctuation)

# 使用模型进行语言识别
language_detected = model.predict(sentence_without_punctuation, k=1)

if language_detected[0][0] == '__label__en':
    print(sentence_without_punctuation + ' en')

elif language_detected[0][0] == '__label__zh':
    print(sentence_without_punctuation + ' cn')

else:
    print('unknown, maybe 汉语标点用在英文中了')

这将使用 fasttext 库进行语言识别,希望这对您有所帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-19 16:25:12 | 显示全部楼层
您提到的问题是 langid 库在某些情况下无法正确识别中英文。这可能是因为句子中包含了一些让模型难以判断的内容。您给出的示例代码可以作为一个简单的区分中英文句子的方法,但并不完美。

为了提高识别准确度,您可以尝试使用更健壮的方法。例如,可以考虑使用 Google 的开源库 cld3(Compact Language Detector v3)进行语言检测。cld3 是一个基于神经网络的语言识别库,其性能相对较好。

首先,确保已经安装了 cld3 库:
pip install pycld3

然后,您可以使用以下代码替换您现有的代码:
import re
import cld3
import string
from zhon.hanzi import punctuation as cn_punctuation

sentence_without_punctuation = "Can sleep says Big Pig."

print(sentence_without_punctuation)

language_detected = cld3.get_language(sentence_without_punctuation)

if language_detected.language == 'en':
    print(sentence_without_punctuation + ' en')

elif language_detected.language == 'zh':
    print(sentence_without_punctuation + ' cn')

else:
    print('unknown, maybe 汉语标点用在英文中了')

这将有助于提高中英文句子识别的准确性。但是,请注意,没有任何方法可以确保 100% 的准确性。在一些极端情况下,您可能仍然会遇到一些问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-19 16:35:56 | 显示全部楼层
isdkz 发表于 2023-4-19 16:25
您提到的问题是 langid 库在某些情况下无法正确识别中英文。这可能是因为句子中包含了一些让模型难以判断的 ...

装不了,要用其他方法?


PS C:\Users\dengz> pip install pycld3
Collecting pycld3
  Using cached pycld3-0.22.tar.gz (726 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: pycld3
  Building wheel for pycld3 (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for pycld3 (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [43 lines of output]
      C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\config\setupcfg.py:516: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
        warnings.warn(msg, warning_class)
      running bdist_wheel
      running build
      Traceback (most recent call last):
        File "C:\Python310\lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
          main()
        File "C:\Python310\lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "C:\Python310\lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\build_meta.py", line 413, in build_wheel
          return self._build_with_temp_dir(['bdist_wheel'], '.whl',
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\build_meta.py", line 398, in _build_with_temp_dir
          self.run_setup()
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\build_meta.py", line 484, in run_setup
          super(_BuildMetaLegacyBackend,
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\build_meta.py", line 335, in run_setup
          exec(code, locals())
        File "<string>", line 173, in <module>
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\__init__.py", line 108, in setup
          return distutils.core.setup(**attrs)
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 185, in setup
          return run_commands(dist)
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 201, in run_commands
          dist.run_commands()
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\dist.py", line 1221, in run_command
          super().run_command(command)
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 988, in run_command
          cmd_obj.run()
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\wheel\bdist_wheel.py", line 343, in run
          self.run_command("build")
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\_distutils\cmd.py", line 318, in run_command
          self.distribution.run_command(command)
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\dist.py", line 1221, in run_command
          super().run_command(command)
        File "C:\Users\dengz\AppData\Local\Temp\pip-build-env-znx35nrl\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 988, in run_command
          cmd_obj.run()
        File "<string>", line 109, in run
      RuntimeError: The Protobuf compiler, `protoc`, which is required for building this package, could not be found.
      See https://github.com/protocolbuffers/protobuf for information on installing Protobuf.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pycld3
Failed to build pycld3
ERROR: Could not build wheels for pycld3, which is required to install pyproject.toml-based projects
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-19 16:42:57 | 显示全部楼层
本帖最后由 blackantt 于 2023-4-19 16:44 编辑

pip install Cython
pip install pycld3

还是装不了,怪

这里有编译过程。 不知道行不。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-19 16:43:31 | 显示全部楼层    本楼为最佳答案   
blackantt 发表于 2023-4-19 16:35
装不了,要用其他方法?

要折腾一下编译环境,如果你的电脑上没有C++编译环境的话,安装完Protobuf编译器可能还要折腾一下C++的编译环境

从您提供的错误信息来看,您需要先安装 Protobuf 编译器(protoc),因为它是构建 pycld3 的必需工具。您可以按照以下步骤进行安装:

对于 Windows 用户:

  • 访问 Protobuf 的发布页面:https://github.com/protocolbuffers/protobuf/releases
  • 在页面中找到与您的系统兼容的最新版本(如 protoc-3.x.x-win64.zip),并下载 ZIP 文件。
  • 解压 ZIP 文件,并将 bin 文件夹添加到您的系统环境变量 PATH 中。


然后,您可以再次尝试安装 pycld3:
pip install pycld3

如果您仍然无法安装 pycld3,可以尝试使用另一个方法来区分中英文句子,例如使用 fasttext。首先,安装 fasttext 库:
pip install fasttext

然后,您需要下载一个预训练的语言识别模型。您可以从这里下载:https://dl.fbaipublicfiles.com/f ... -models/lid.176.bin

使用以下代码替换您现有的代码:
import re
import fasttext
import string
from zhon.hanzi import punctuation as cn_punctuation

# 加载预训练的模型
model = fasttext.load_model("lid.176.bin")

sentence_without_punctuation = "Can sleep says Big Pig."

print(sentence_without_punctuation)

# 使用模型进行语言识别
language_detected = model.predict(sentence_without_punctuation, k=1)

if language_detected[0][0] == '__label__en':
    print(sentence_without_punctuation + ' en')

elif language_detected[0][0] == '__label__zh':
    print(sentence_without_punctuation + ' cn')

else:
    print('unknown, maybe 汉语标点用在英文中了')

这将使用 fasttext 库进行语言识别,希望这对您有所帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表