如何修复langdetect的不稳定结果

问题描述

我想使用langdetect检测文本中的语言。 根据{{​​3}} ,我必须设置一个种子以获得稳定的结果。

语言检测算法是不确定性的,这意味着如果您尝试在太短或太含糊的文本上运行它,则每次运行它都可能得到不同的结果。 为了获得一致的结果,请在检测到第一种语言之前调用以下代码

如下所示,结果似乎不起作用。我想念什么?

from langdetect import detect,detector_factory,detect_langs

my_string = "Hi,my friend lives next to me. Can you call her? Thibault François. Envoyé depuis mon mobile"

detector_factory.seed = 42

for i in range(5):
    print(detect_langs(my_string),detect(my_string))

结果示例:

[fr:0.7142820855500301,en:0.28571744799229243] en
[fr:0.7142837342663328,en:0.2857140098811736] en
[en:0.571427940246422,fr:0.4285710874902514] fr
[en:0.5714284102904427,fr:0.42857076299207464] fr
[en:0.5714277269187811,fr:0.4285715961184375] fr

解决方法

如果您使用//Table Data const **CompanyData** = [ {id: 1,name: 'Company1',phone: 'Phone1',address: 'Miron1',persons: [1,2]},{id: 2,name: 'Company2',phone: 'Phone2',address: 'Miron2',persons: [1]},{id: 3,name: 'Company3',phone: 'Phone3',address: 'Miron3'} ] //Person Data const **PersonData** = [ {id: 1,firstName: 'a',lastName: 'b',phone: 'phone1',address: 'Miron1'},firstName: 'c',lastName: 'd',phone: 'phone2',address: 'Miron2'},firstName: 'e',lastName: 'f',phone: 'phone3',address: 'Miron3'} ] //Filter Person CompanyData.forEach((company) => { if(company.persons) { company.persons = company.persons.map((member) => { return PersonData.filter((person) =>{ return person.id === member }) }) } }) (如文档中所建议)代替DetectorFactory,则可以使用。

detector_factory

结果:

from langdetect import detect,DetectorFactory,detect_langs

my_string = "Hi,my friend lives next to me. Can you call her? Thibault François. Envoyé depuis mon mobile"

DetectorFactory.seed = 42

for i in range(5):
    print(detect_langs(my_string),detect(my_string))