Re: Issue updating a FileDataModel

2014-03-04 Thread Juan José Ramos
Thanks Sebastian.

Although I got the FileDataModel updating correctly after following your
advice, everything seems to point that I will need to use a database to
back my dataModel.


On Mon, Mar 3, 2014 at 3:47 PM, Sebastian Schelter s...@apache.org wrote:

 I think it depends on the difference between the time of the call to
 refresh() and the last modified time of the file.

 --sebastian


 On 03/03/2014 04:45 PM, Juan José Ramos wrote:

 Thanks for the reply, Sebastian.

 I do not have concurrent updates, but they actually may happen very, very
 close in time.

 Would the fact of adding the new preferences to new files or appending to
 the existing one make any difference or does everything depends on the
 time
 elapsed between two calls to recommender.refresh(null)?

 Many thanks.


 On Mon, Mar 3, 2014 at 1:18 PM, Sebastian Schelter s...@apache.org
 wrote:

  Hi Juan,

 IIRC then FileDataModel has a parameter that determines how much time
 must
 have been spent since the last modification of the underlying file. You
 can
 also directly append new data to the original file.

 If you want a to have a DataModel that can be concurrently updated, I
 suggest your data to a database.

 --sebastian


 On 03/02/2014 11:11 PM, Juan José Ramos wrote:

  I am having issues refreshing my recommender, in particular with the
 DataModel.

 I am using a FileDataModel and a GenericItemBasedRecommender that also
 has
 a CachingItemSimilarity wrapping a FileItemSimilarity. But for the test
 I
 am running I am making things even simpler.

 By the time I instantiate the recommender, these two files are in the
 FileSystem:
 data/datamodel.txt
 0,1,0.0

 data/datamodel.0.txt
 0,2,1.0

 And then I run the code you can find below:

 
 ---

 FileDataModel dataModel = new FileDataModel(new
 File(data/dataModel.txt
 ));

  FileItemSimilarity itemSimilarity = new FileItemSimilarity(new
 File(
 data/similarities));

GenericItemBasedRecommender itemRecommender =
 newGenericItemBasedRecommender(dataModel, itemSimilarity);


  System.out.println(Number of users in the system:  +
 itemRecommender.getDataModel().getNumUsers()+ and  +
 itemRecommender.getDataModel().getNumItems() + items);

FileWriter writer = new FileWriter(new File(data/dataModel.1.txt));

writer.write(1,2,1.0\r);

writer.close();

  writer = new FileWriter(new File(data/dataModel.2.txt));

writer.write(2,2,1.0\r);

writer.close();

  writer = new FileWriter(new File(data/dataModel.3.txt));

writer.write(3,2,1.0\r);

writer.close();

  writer = new FileWriter(new File(data/dataModel.4.txt));

writer.write(4,2,1.0\r);

writer.close();

  writer = new FileWriter(new File(data/dataModel.5.txt));

writer.write(5,2,1.0\r);

writer.close();

  writer = new FileWriter(new File(data/dataModel.6.txt));

writer.write(6,2,1.0\r);

writer.close();

itemRecommender.refresh(null);

System.out.println(Number of users in the system:  +
 itemRecommender.getDataModel().getNumUsers()+ and  +
 itemRecommender.getDataModel().getNumItems() + items);

 
 ---

 The output is the same in both println: Number of users in the system: 2
 and 2items. So, only the information from the files that were on the
 system
 by the time I run this test seem to get loaded on the DataModel.

 What can be causing that? Is there a maximum number of updates a
 FileDataModel can take up in every refresh?

 Could it be that actually by the time I call
 itemRecommender.refresh(null)
 the files have not been written to the FileSystem?

 Should I be calling refresh in a different manner?

 Thank you for your help.








Re: Issue updating a FileDataModel

2014-03-03 Thread Sebastian Schelter

Hi Juan,

IIRC then FileDataModel has a parameter that determines how much time 
must have been spent since the last modification of the underlying file. 
You can also directly append new data to the original file.


If you want a to have a DataModel that can be concurrently updated, I 
suggest your data to a database.


--sebastian

On 03/02/2014 11:11 PM, Juan José Ramos wrote:

I am having issues refreshing my recommender, in particular with the
DataModel.

I am using a FileDataModel and a GenericItemBasedRecommender that also has
a CachingItemSimilarity wrapping a FileItemSimilarity. But for the test I
am running I am making things even simpler.

By the time I instantiate the recommender, these two files are in the
FileSystem:
data/datamodel.txt
0,1,0.0

data/datamodel.0.txt
0,2,1.0

And then I run the code you can find below:

---

   FileDataModel dataModel = new FileDataModel(new File(data/dataModel.txt
));

FileItemSimilarity itemSimilarity = new FileItemSimilarity(new File(
data/similarities));

  GenericItemBasedRecommender itemRecommender =
newGenericItemBasedRecommender(dataModel, itemSimilarity);

System.out.println(Number of users in the system:  +
itemRecommender.getDataModel().getNumUsers()+ and  +
itemRecommender.getDataModel().getNumItems() + items);

  FileWriter writer = new FileWriter(new File(data/dataModel.1.txt));

  writer.write(1,2,1.0\r);

  writer.close();

writer = new FileWriter(new File(data/dataModel.2.txt));

  writer.write(2,2,1.0\r);

  writer.close();

writer = new FileWriter(new File(data/dataModel.3.txt));

  writer.write(3,2,1.0\r);

  writer.close();

writer = new FileWriter(new File(data/dataModel.4.txt));

  writer.write(4,2,1.0\r);

  writer.close();

writer = new FileWriter(new File(data/dataModel.5.txt));

  writer.write(5,2,1.0\r);

  writer.close();

writer = new FileWriter(new File(data/dataModel.6.txt));

  writer.write(6,2,1.0\r);

  writer.close();

  itemRecommender.refresh(null);

  System.out.println(Number of users in the system:  +
itemRecommender.getDataModel().getNumUsers()+ and  +
itemRecommender.getDataModel().getNumItems() + items);

---

The output is the same in both println: Number of users in the system: 2
and 2items. So, only the information from the files that were on the system
by the time I run this test seem to get loaded on the DataModel.

What can be causing that? Is there a maximum number of updates a
FileDataModel can take up in every refresh?

Could it be that actually by the time I call itemRecommender.refresh(null)
the files have not been written to the FileSystem?

Should I be calling refresh in a different manner?

Thank you for your help.





Re: Issue updating a FileDataModel

2014-03-03 Thread Juan José Ramos
Thanks for the reply, Sebastian.

I do not have concurrent updates, but they actually may happen very, very
close in time.

Would the fact of adding the new preferences to new files or appending to
the existing one make any difference or does everything depends on the time
elapsed between two calls to recommender.refresh(null)?

Many thanks.


On Mon, Mar 3, 2014 at 1:18 PM, Sebastian Schelter s...@apache.org wrote:

 Hi Juan,

 IIRC then FileDataModel has a parameter that determines how much time must
 have been spent since the last modification of the underlying file. You can
 also directly append new data to the original file.

 If you want a to have a DataModel that can be concurrently updated, I
 suggest your data to a database.

 --sebastian


 On 03/02/2014 11:11 PM, Juan José Ramos wrote:

 I am having issues refreshing my recommender, in particular with the
 DataModel.

 I am using a FileDataModel and a GenericItemBasedRecommender that also has
 a CachingItemSimilarity wrapping a FileItemSimilarity. But for the test I
 am running I am making things even simpler.

 By the time I instantiate the recommender, these two files are in the
 FileSystem:
 data/datamodel.txt
 0,1,0.0

 data/datamodel.0.txt
 0,2,1.0

 And then I run the code you can find below:

 
 ---

FileDataModel dataModel = new FileDataModel(new
 File(data/dataModel.txt
 ));

 FileItemSimilarity itemSimilarity = new FileItemSimilarity(new File(
 data/similarities));

   GenericItemBasedRecommender itemRecommender =
 newGenericItemBasedRecommender(dataModel, itemSimilarity);


 System.out.println(Number of users in the system:  +
 itemRecommender.getDataModel().getNumUsers()+ and  +
 itemRecommender.getDataModel().getNumItems() + items);

   FileWriter writer = new FileWriter(new File(data/dataModel.1.txt));

   writer.write(1,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.2.txt));

   writer.write(2,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.3.txt));

   writer.write(3,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.4.txt));

   writer.write(4,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.5.txt));

   writer.write(5,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.6.txt));

   writer.write(6,2,1.0\r);

   writer.close();

   itemRecommender.refresh(null);

   System.out.println(Number of users in the system:  +
 itemRecommender.getDataModel().getNumUsers()+ and  +
 itemRecommender.getDataModel().getNumItems() + items);

 
 ---

 The output is the same in both println: Number of users in the system: 2
 and 2items. So, only the information from the files that were on the
 system
 by the time I run this test seem to get loaded on the DataModel.

 What can be causing that? Is there a maximum number of updates a
 FileDataModel can take up in every refresh?

 Could it be that actually by the time I call itemRecommender.refresh(null)
 the files have not been written to the FileSystem?

 Should I be calling refresh in a different manner?

 Thank you for your help.





Re: Issue updating a FileDataModel

2014-03-03 Thread Sebastian Schelter
I think it depends on the difference between the time of the call to 
refresh() and the last modified time of the file.


--sebastian

On 03/03/2014 04:45 PM, Juan José Ramos wrote:

Thanks for the reply, Sebastian.

I do not have concurrent updates, but they actually may happen very, very
close in time.

Would the fact of adding the new preferences to new files or appending to
the existing one make any difference or does everything depends on the time
elapsed between two calls to recommender.refresh(null)?

Many thanks.


On Mon, Mar 3, 2014 at 1:18 PM, Sebastian Schelter s...@apache.org wrote:


Hi Juan,

IIRC then FileDataModel has a parameter that determines how much time must
have been spent since the last modification of the underlying file. You can
also directly append new data to the original file.

If you want a to have a DataModel that can be concurrently updated, I
suggest your data to a database.

--sebastian


On 03/02/2014 11:11 PM, Juan José Ramos wrote:


I am having issues refreshing my recommender, in particular with the
DataModel.

I am using a FileDataModel and a GenericItemBasedRecommender that also has
a CachingItemSimilarity wrapping a FileItemSimilarity. But for the test I
am running I am making things even simpler.

By the time I instantiate the recommender, these two files are in the
FileSystem:
data/datamodel.txt
0,1,0.0

data/datamodel.0.txt
0,2,1.0

And then I run the code you can find below:


---

FileDataModel dataModel = new FileDataModel(new
File(data/dataModel.txt
));

 FileItemSimilarity itemSimilarity = new FileItemSimilarity(new File(
data/similarities));

   GenericItemBasedRecommender itemRecommender =
newGenericItemBasedRecommender(dataModel, itemSimilarity);


 System.out.println(Number of users in the system:  +
itemRecommender.getDataModel().getNumUsers()+ and  +
itemRecommender.getDataModel().getNumItems() + items);

   FileWriter writer = new FileWriter(new File(data/dataModel.1.txt));

   writer.write(1,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.2.txt));

   writer.write(2,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.3.txt));

   writer.write(3,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.4.txt));

   writer.write(4,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.5.txt));

   writer.write(5,2,1.0\r);

   writer.close();

 writer = new FileWriter(new File(data/dataModel.6.txt));

   writer.write(6,2,1.0\r);

   writer.close();

   itemRecommender.refresh(null);

   System.out.println(Number of users in the system:  +
itemRecommender.getDataModel().getNumUsers()+ and  +
itemRecommender.getDataModel().getNumItems() + items);


---

The output is the same in both println: Number of users in the system: 2
and 2items. So, only the information from the files that were on the
system
by the time I run this test seem to get loaded on the DataModel.

What can be causing that? Is there a maximum number of updates a
FileDataModel can take up in every refresh?

Could it be that actually by the time I call itemRecommender.refresh(null)
the files have not been written to the FileSystem?

Should I be calling refresh in a different manner?

Thank you for your help.