项目文件夹

文件
wehub-resource-sync 593b94c120
pytest / Unit Tests (push) Has been cancelled
pytest / Integration (integration_tests_a) (push) Has been cancelled
pytest / Integration (integration_tests_b) (push) Has been cancelled
pytest / Integration (integration_tests_c) (push) Has been cancelled
pytest / Integration (integration_tests_d) (push) Has been cancelled
pytest / Integration (integration_tests_e) (push) Has been cancelled
pytest / Integration (integration_tests_f) (push) Has been cancelled
pytest / Integration (integration_tests_g) (push) Has been cancelled
pytest / Integration (integration_tests_h) (push) Has been cancelled
pytest / Integration (integration_tests_i) (push) Has been cancelled
pytest / Integration (integration_tests_j) (push) Has been cancelled
pytest / Distributed (distributed_a) (push) Has been cancelled
pytest / Distributed (distributed_b) (push) Has been cancelled
pytest / Distributed (distributed_c) (push) Has been cancelled
pytest / Distributed (distributed_d) (push) Has been cancelled
pytest / Distributed (distributed_e) (push) Has been cancelled
pytest / Distributed (distributed_f) (push) Has been cancelled
pytest / Minimal Install (push) Has been cancelled
pytest / Event File (push) Has been cancelled
pytest (slow) / py-slow (push) Has been cancelled
Publish JSON Schema / publish-schema (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:49:20 +08:00

215 行
5.1 KiB
Python

#! /usr/bin/env python
# Copyright (c) 2023 Predibase, Inc., 2019 Uber Technologies, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
import logging
import sys
logger = logging.getLogger(__name__)
nlp_pipelines = {
"en": None,
"it": None,
"es": None,
"de": None,
"fr": None,
"pt": None,
"nl": None,
"el": None,
"nb": None,
"lt": None,
"da": None,
"pl": None,
"ro": None,
"ja": None,
"zh": None,
"xx": None,
}
language_module_registry = {
"en": "en_core_web_sm",
"it": "it_core_news_sm",
"es": "es_core_news_sm",
"de": "de_core_news_sm",
"fr": "fr_core_news_sm",
"pt": "pt_core_news_sm",
"nl": "nl_core_news_sm",
"el": "el_core_news_sm",
"nb": "nb_core_news_sm",
"lt": "lt_core_news_sm",
"da": "da_core_news_sm",
"pl": "pl_core_news_sm",
"ro": "ro_core_news_sm",
"ja": "ja_core_news_sm",
"zh": "zh_core_web_sm",
"xx": "xx_ent_wiki_sm",
}
default_characters = [
" ",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"8",
"9",
"-",
",",
";",
".",
"!",
"?",
":",
"'",
"'",
"/",
"\\",
"|",
"_",
"@",
"#",
"$",
"%",
"^",
"&",
"*",
"~",
"`",
"+",
"-",
"=",
"<",
">",
"(",
")",
"[",
"]",
"{",
"}",
]
punctuation = {".", ",", "@", "$", "%", "/", ":", ";", "+", "="}
def load_nlp_pipeline(language="xx"):
if language not in language_module_registry:
logger.error(f"Language {language} is not supported.Suported languages are: {language_module_registry.keys()}")
raise ValueError
else:
spacy_module_name = language_module_registry[language]
if nlp_pipelines[language] is None:
logger.info("Loading NLP pipeline")
try:
import spacy
except ImportError:
logger.error(
" spacy is not installed. "
"In order to install all text feature dependencies run "
"pip install ludwig[text]"
)
sys.exit(-1)
try:
nlp_pipelines[language] = spacy.load(spacy_module_name, disable=["parser", "tagger", "ner"])
except OSError:
logger.info(" spaCy {} model is missing, downloading it (this will only happen once)")
from spacy.cli import download
download(spacy_module_name)
nlp_pipelines[language] = spacy.load(spacy_module_name, disable=["parser", "tagger", "ner"])
return nlp_pipelines[language]
def pass_filters(
token, filter_numbers=False, filter_punctuation=False, filter_short_tokens=False, filter_stopwords=False
):
passes_filters = True
if filter_numbers:
passes_filters = not token.like_num
if passes_filters and filter_punctuation:
passes_filters = not bool(set(token.orth_) & punctuation)
if passes_filters and filter_short_tokens:
passes_filters = len(token) > 2
if passes_filters and filter_stopwords:
passes_filters = not token.is_stop
return passes_filters
def process_text(
text,
nlp_pipeline,
return_lemma=False,
filter_numbers=False,
filter_punctuation=False,
filter_short_tokens=False,
filter_stopwords=False,
):
doc = nlp_pipeline(text)
return [
token.lemma_ if return_lemma else token.text
for token in doc
if pass_filters(token, filter_numbers, filter_punctuation, filter_short_tokens, filter_stopwords)
]
if __name__ == "__main__":
text = (
"Hello John, how are you doing my good old friend? Are you still number 732 in the list? Did you pay $32.43 or "
"54.21 for the book?"
)
print(process_text(text, load_nlp_pipeline()))
print(
process_text(text, load_nlp_pipeline(), filter_numbers=True, filter_punctuation=True, filter_short_tokens=True)
)
print(process_text(text, load_nlp_pipeline(), filter_stopwords=True))
print(process_text(text, load_nlp_pipeline(), return_lemma=True))
print(
process_text(
text,
load_nlp_pipeline(),
return_lemma=True,
filter_numbers=True,
filter_punctuation=True,
filter_short_tokens=True,
)
)
print(process_text(text, load_nlp_pipeline(), return_lemma=True, filter_stopwords=True))