python中是否有任何包可以识别参数的字母数字别名之间的相似性?

数据挖掘 Python nltk
2021-09-23 02:46:07

例如:对于像输入电压这样的参数,

     Alias names : V_INPUT, VIN etc.

现在,我希望软件能够将每个别名识别为相同。有什么包/方法可以实现这一点吗?

Nltk 只允许字典单词。

2个回答

如果您知道只有特定的变体,您显然可以自己制作一个查找表(即 Python 字典)。

否则,您可以尝试使用模糊匹配库,例如blurwuzzy

这将根据您的参数列表(测量值)为您的搜索词提供“接近度”分数。这是一个如何使用它的示例:

In [1]: from fuzzywuzzy import process

In [2]: measurements = ["Voltage", "Current", "Resistance", "Power"]

In [3]: variants = ["VOLT", "voltage_in", "resistnce", "pwr", "amps"] # notice typos etc.

In [4]: for variant in variants:
   ...:     results = process.extract(variant, measurements, limit=2)
   ...:     print(f"{variant:<11} -> {results}")  # See which two were found to be closest 
   ...:     best = results[0]                     # Take the best match by score (first in the list)
   ...:     if best[1] < 70:                      # Set a threshold at 70%
   ...:         print(f"Rejected best match for '{variant}': {best}")

VOLT        -> [('Voltage', 90), ('Current', 22)]
voltage_in  -> [('Voltage', 82), ('Resistance', 30)]
resistnce   -> [('Resistance', 95), ('Current', 38)]
pwr         -> [('Power', 75), ('Current', 30)]
amps        -> [('Voltage', 26), ('Resistance', 22)]
Rejected best match for 'amps': ('Voltage', 26)

所以大多数工作都很好,包括错字示例。

显然这不是一种semantic搜索,因此amps不会以Current任何方式与之相关。


要走语义编码的道路,您可能需要研究“词嵌入”,它确实会根据词的语义含义尝试匹配词的真实含义。从这里开始,您可以查看Word2Vec或 GloVe` 嵌入。也许甚至有一个工具或库已经提供了这种能力。

这些方法本质上不会处理诸如拼写错误之类的问题,因此为了获得最佳结果,您甚至可以将这两种方法结合起来。

是的,有一对。我最喜欢的是 PyDictionary

或者,如果您使用的是 pip,请确保您是最新的并在终端中执行以下命令: pip install PyDictionary希望这会有所帮助