Modernize: latest deps, py3.12, cache_data/cache_resource, fix empty seed_keywords IndexError
Browse files- README.md +2 -0
- app.py +9 -6
- requirements.txt +2 -2
README.md
CHANGED
|
@@ -4,8 +4,10 @@ emoji: 🔑
|
|
| 4 |
colorFrom: purple
|
| 5 |
colorTo: green
|
| 6 |
sdk: streamlit
|
|
|
|
| 7 |
app_file: app.py
|
| 8 |
pinned: false
|
|
|
|
| 9 |
---
|
| 10 |
|
| 11 |
# Configuration
|
|
|
|
| 4 |
colorFrom: purple
|
| 5 |
colorTo: green
|
| 6 |
sdk: streamlit
|
| 7 |
+
python_version: "3.12"
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
+
license: mit
|
| 11 |
---
|
| 12 |
|
| 13 |
# Configuration
|
app.py
CHANGED
|
@@ -40,15 +40,15 @@ form.caption("See the list of pre-trained models that are available here! https:
|
|
| 40 |
form.form_submit_button("Submit")
|
| 41 |
|
| 42 |
|
| 43 |
-
@st.
|
| 44 |
-
def load_and_process_data(path, name, streaming, split_name, number_of_records):
|
| 45 |
-
dataset = load_dataset(path = path, name = name, streaming=streaming)
|
| 46 |
#return list(dataset)
|
| 47 |
dataset_head = dataset[split_name].take(number_of_records)
|
| 48 |
df = pd.DataFrame.from_dict(dataset_head)
|
| 49 |
return df[column_name]
|
| 50 |
|
| 51 |
-
@st.
|
| 52 |
def load_model(model_name):
|
| 53 |
kw_model = KeyBERT(model=model_name)
|
| 54 |
return kw_model
|
|
@@ -57,7 +57,7 @@ model = load_model(model_name=model_name)
|
|
| 57 |
|
| 58 |
if custom_doc:
|
| 59 |
st.header("Original Dataset")
|
| 60 |
-
df = load_and_process_data(dataset_name, dataset_name_2, True, split_name, number_of_records)
|
| 61 |
doc = list(df[index_to_analyze_start:index_to_analyze_end])
|
| 62 |
st.write(df)
|
| 63 |
st.header("Indexed Documents")
|
|
@@ -86,7 +86,10 @@ form2.caption("Due to the implementation details of this in KeyBERT, this doesn'
|
|
| 86 |
|
| 87 |
form2.form_submit_button("Submit")
|
| 88 |
|
| 89 |
-
|
|
|
|
|
|
|
|
|
|
| 90 |
|
| 91 |
st.header("Extracted Keywords/Keyphrases")
|
| 92 |
st.caption("Output is sorted in reverse order (so the final element is the strongest keyphrase and the first element is the nth strongest)")
|
|
|
|
| 40 |
form.form_submit_button("Submit")
|
| 41 |
|
| 42 |
|
| 43 |
+
@st.cache_data
|
| 44 |
+
def load_and_process_data(path, name, streaming, split_name, number_of_records, column_name):
|
| 45 |
+
dataset = load_dataset(path = path, name = name or None, streaming=streaming)
|
| 46 |
#return list(dataset)
|
| 47 |
dataset_head = dataset[split_name].take(number_of_records)
|
| 48 |
df = pd.DataFrame.from_dict(dataset_head)
|
| 49 |
return df[column_name]
|
| 50 |
|
| 51 |
+
@st.cache_resource
|
| 52 |
def load_model(model_name):
|
| 53 |
kw_model = KeyBERT(model=model_name)
|
| 54 |
return kw_model
|
|
|
|
| 57 |
|
| 58 |
if custom_doc:
|
| 59 |
st.header("Original Dataset")
|
| 60 |
+
df = load_and_process_data(dataset_name, dataset_name_2, True, split_name, number_of_records, column_name)
|
| 61 |
doc = list(df[index_to_analyze_start:index_to_analyze_end])
|
| 62 |
st.write(df)
|
| 63 |
st.header("Indexed Documents")
|
|
|
|
| 86 |
|
| 87 |
form2.form_submit_button("Submit")
|
| 88 |
|
| 89 |
+
## KeyBERT indexes seed_keywords[0] directly, so an empty list raises IndexError - pass None instead
|
| 90 |
+
seed_keywords_list = seed_keywords.split() or None
|
| 91 |
+
|
| 92 |
+
keywords = model.extract_keywords(doc, keyphrase_ngram_range=(keyphrase_min, keyphrase_max), use_maxsum = use_maxsum, use_mmr = use_mmr, diversity = diversity, top_n = top_n, min_df = min_df, nr_candidates = nr_candidates, seed_keywords = seed_keywords_list)
|
| 93 |
|
| 94 |
st.header("Extracted Keywords/Keyphrases")
|
| 95 |
st.caption("Output is sorted in reverse order (so the final element is the strongest keyphrase and the first element is the nth strongest)")
|
requirements.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
-
keybert
|
| 2 |
streamlit
|
|
|
|
|
|
|
| 3 |
pandas
|
| 4 |
datasets
|
| 5 |
-
altair<5
|
|
|
|
|
|
|
| 1 |
streamlit
|
| 2 |
+
keybert
|
| 3 |
+
sentence-transformers
|
| 4 |
pandas
|
| 5 |
datasets
|
|
|